今までは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 を紹介しようと思います。
コメント