docker でlaravel 環境構築 (compose.yml 編)

docker

今まではVM で一からlaravel 環境構築とかをしていましたが、ローカルの環境をいちいち作るのが大変だなと思い始めました。その時に、ansible を書いて使いまわせるパターンとdocker で一気に環境構築をするパターンの二つを考えました。Ansible は結構準備が大変な気がしましたので、Docker を選択しました。その時に使ったcompose yml を紹介したいと思います。

まずは環境はこんな感じを最終ゴールとしています。

ディレクトリ構造について

├--- docker-compose.yml
├--- dockerfile
│   ├--- app
│   │   ├--- Dockerfile
│   │   └--- zzz-www.conf
│   ├---- mysql
│   │   ├---- my.cnf
│   │   └---- Dockerfile
│   └── nginx
│        ├---- default.conf
│        └---- Dockerfile
├── src   
└── php-fpm-socket

もっと他のパターンもありそうです。例えば、src をdock-compose.yml と一緒の階層にしていますが、外出ししてもいい気がします。とりあえずはこの構造を想定して、yaml を書いていきます。

docker-compose.yml について

最終形がこんな感じです。

(もしかしたらコピペが上手くいってないかもですので、コピペの際は注意です)

version: '3'

volumes:
  db-volume:

services:
  app:
    build:
      context: ./dockerfile/app/
      dockerfile: Dockerfile
    volumes:
      - "./src:/var/www/html"
      - "php-fpm-socket:/var/run/php-fpm"

    networks:
      - laravel-network

mysql:
    build:
      context: ./dockerfile/mysql/
      dockerfile: Dockerfile
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: root
      MYSQL_USER: root
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
      TZ: "Asia/Tokyo"

   volumes:
      - "db-volume:/var/lib/mysql"
    networks:
      - laravel-network

  nginx:
    build:
      context: ./dockerfile/nginx
      dockerfile: Dockerfile
    ports:
      - "80:80"
    volumes:
      - "./src:/var/www/html"
      - "php-fpm-socket:/var/run/php-fpm"

      - "./dockerfile/nginx/default.conf:/etc/nginx/conf.d/default.conf"
    depends_on:
      - app
      - mysql
    networks:
      - laravel-network

yaml の最終形態はこんな感じになります。今回はphp-fpm とnginx のcontainer を分けています。
unix でかく場合は、9000 port をphp-fpm に開けてあげたらいいのですが、socket 通信をするので、
そんな簡単には行きませんでした。

なので、php-fpm のcontainer からsocket をbind mount してあげて、nginx からもそれが見えるように
bind mount しています。共通のmount 先が存在するような感じですね。

  - "php-fpm-socket:/var/run/php-fpm"

後は、気になるポイントとしては、nginx のdefault.conf はmount しているのに、php-fpm のconf ファイルはmount してない所かと思います。これはdockerfile の参照したものに依存してしまうので、dockerfile を解説するときに、置いておきます。とりあえず現時点では、zzz-www.conf がないと上手くoverride できないと思っておいてください。(もしかしたら方法あるのかもですが)

次のブログではdockerfile を紹介しようと思います。

コメント

タイトルとURLをコピーしました