前回まででLaravelとNuxt.jsのコンテナを用意したので今回はそれらをまとめて起動や停止できるようにDocker Composeを利用していきます。前回まででこんな感じの構成になっています。ここにdocker-compose.ymlを作成していきます。
1 2 3 4 5 6 7 8 9 10 11 |
C:\project │ ├─api │ │ Dockerfile │ │ httpd.conf │ │ │ └─src(Laravelのプロジェクト) └─app │ Dockerfile │ └─src(Nuxt.jsのプロジェクト) |
Docker Composeの活用
一応Docker Composeで出来ることを説明すると、ymlファイルでパラメータを指定してコンテナを起動できる仕組みです。ポートのマッピングとかを-p 80:8080とコンテナ起動の都度指定していたのをymlファイルに記載することで手間を省くことができるようになったり、複数のコンテナをまとめて起動出来たりします。
docker-compose.ymlの作成
まずはC:¥projectの直下にdocker-compose.ymlという名前でファイルを作成。他の名前でもいいけどその場合は使う際に名前の指定が必要になってめんどくさいので素直にこの名前にしておこう。
1 2 3 4 5 6 7 8 9 10 11 12 |
C:\project │ docker-compose.yml │ ├─api │ │ Dockerfile │ │ httpd.conf │ │ │ └─src(Laravelのプロジェクト) └─app │ Dockerfile │ └─src(Nuxt.jsのプロジェクト) |
docker-compose.ymlの編集
最低限の設定で作成して動作確認をしてみる。バージョンは3にして、これまでに作ったDockerfileがある場所を指定するだけ。
1 2 3 4 5 6 7 |
version: '3' services: api: build: ./api/ app: build: ./app/ |
お試し実行
作ったら起動してみる。
c:\>cd project
c:\project>docker-compose up
なんかよく分らん結果になった。
commandの設定
コンテナ起動時に謎のコマンドを実行しているように見えたのでちゃんとdocker-compose.ymlにcommandを指定して再実行。
1 2 3 4 5 6 7 8 9 |
version: '3' services: api: build: ./api/ command: /sbin/init app: build: ./app/ command: /sbin/init |
c:\project>docker-compose up
何となく良くなったけどコンテナにアタッチされちゃって何もできなくなっちゃった。
Ctrl+Cでとりあえず停止。
そんで起動後にデタッチするようにオプション指定して再実行。
c:\project>docker-compose up -d
何となくいい感じ。
コンテナの動作確認
試しにコンテナに入ってみる。コンテナの名前はフォルダの名前を組み合わせて勝手に作られるらしい。多分指定することも出来ると思うけどまあいいや。
c:\project>docker exec -it project_api_1 bash
# ls
出来てるっぽい。
ポートのマッピング
LaravelとNuxt.jsの開発サーバーにホストから接続するためのポートをマッピングさせる。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
version: '3' services: api: build: ./api/ command: /sbin/init ports: - '8000:8000' app: build: ./app/ command: /sbin/init ports: - '3000:3000' |
一旦コンテナから抜けてコンテナ削除(docker-compose down)&再作成(docker-compose up -d)。そんでもってLaravelのコンテナに入って「php artisan serve -host 0.0.0.0」してブラウザで接続してみる。
# exit
c:\project>docker-compose down
c:\project>docker-compose up -d
c:\project>docker exec -it project_api_1 bash
# cd /var/www/html/
# php artisan serve --host 0.0.0.0
すんなり成功。
一応Nuxt.jsも確認。
# exit
c:\project>docker exec -it project_app_1 bash
# cd /usr/local/src
~nuxt.config.jsを編集して0.0.0.0で起動するよう変更~
# npm run dev
OK。
その他もろもろの設定
作業用ディレクトリを指定。もう必要ないけど一応privilegedをtrueにするよう修正。確認はまあいいや。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
version: '3' services: api: build: ./api/ command: /sbin/init ports: - '8000:8000' working_dir: /var/www/html privileged: true app: build: ./app/ command: /sbin/init ports: - '3000:3000' working_dir: /usr/local/src privileged: true |
DBの追加
ついでにデータベースも追加。mariadbのイメージをそのまま使う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
version: '3' services: api: build: ./api/ command: /sbin/init ports: - '8000:8000' privileged: true app: build: ./app/ command: /sbin/init ports: - '3000:3000' privileged: true db: image: mariadb ports: - 3306:3306 environment: - MYSQL_ROOT_PASSWORD=pwd - MYSQL_DATABASE=test - MYSQL_USER=user - MYSQL_PASSWORD=pwd |
一応、動作確認。
# exit
c:\project>docker-compose stop
c:\project>docker-compose up -d
# vi .env
~DB設定をdocker-compose.ymlの指定に合わせて編集~
# php artisan migrate
出来てるっぽい。
最後に
意外とすんなり出来た。まだ足りない事はあるかもしれないけどDockerの設定類はここまで。次はVisutal Studio Codeの設定をしていこうと思う。