LaravelとNuxt.jsをVSCodeで開発する環境をDockerで用意した【Docker Compose編】

前回まででLaravelとNuxt.jsのコンテナを用意したので今回はそれらをまとめて起動や停止できるようにDocker Composeを利用していきます。前回まででこんな感じの構成になっています。ここにdocker-compose.ymlを作成していきます。

Docker Composeの活用

一応Docker Composeで出来ることを説明すると、ymlファイルでパラメータを指定してコンテナを起動できる仕組みです。ポートのマッピングとかを-p 80:8080とコンテナ起動の都度指定していたのをymlファイルに記載することで手間を省くことができるようになったり、複数のコンテナをまとめて起動出来たりします。

docker-compose.ymlの作成

まずはC:¥projectの直下にdocker-compose.ymlという名前でファイルを作成。他の名前でもいいけどその場合は使う際に名前の指定が必要になってめんどくさいので素直にこの名前にしておこう。

docker-compose.ymlの編集

最低限の設定で作成して動作確認をしてみる。バージョンは3にして、これまでに作ったDockerfileがある場所を指定するだけ。

お試し実行

作ったら起動してみる。

実行コマンド

c:\>cd project

c:\project>docker-compose up

なんかよく分らん結果になった。

commandの設定

コンテナ起動時に謎のコマンドを実行しているように見えたのでちゃんとdocker-compose.ymlにcommandを指定して再実行。

実行コマンド

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の開発サーバーにホストから接続するためのポートをマッピングさせる。

一旦コンテナから抜けてコンテナ削除(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にするよう修正。確認はまあいいや。

DBの追加

ついでにデータベースも追加。mariadbのイメージをそのまま使う。

一応、動作確認。

実行コマンド

# 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の設定をしていこうと思う。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です