2022/05/18
ここでは「Laravelローカル環境構築(Docker)」シリーズで構築したコンテナの立ち上げ手順について解説します。
毎回、プロジェクトの開発をはじめる際に、ルーチンワークとして実行するコマンドになります。
Laravelローカル環境構築(Docker その①)
Laravelローカル環境構築(Docker その② ~ DB設定+phpMyAdmin ~)
Laravelローカル環境構築(Docker その③ ~ Authの実装+Node.js ~)
Laravelローカル環境構築(Docker その④ ~ メール送信の設定+MailCatcher ~)
基本の流れ
1) カレントディレクトリの移動
基本的に docker-compose を使っているプロジェクトでアプリケーションの各コンテナを立ち上げる場合、まずは docker-compose.yml がどこにあるのかを確認します。
docker-compose.yml がどこにあるかわかったら、そのディレクトリに移動して docker-compose up -d
で立ち上げることが出来ます。
ここでは 「DockerPractice」 がそのディレクトリだとします。
# ホームディレクトリ直下にある DockerPractice ディレクトリに移動
$ cd DockerPractice
2) ステータス確認
docker-compose ps
でコンテナ一覧を表示します。
$ docker-compose ps
実演
3)起動
ディレクトリに移動して docker-compose up -d
で立ち上げることが出来ます。
-d
のオプションはデタッチド・モードと呼ばれ、バックグラウンド上でコンテナを立ち上げるモードです。
これをつけていないとログがダラダラと流れ出します。
# Dockerを起動
$ docker-compose up -d
# 起動しているコンテナが表示される
$ docker ps
実演
4)立ち上がっているコンテナの中に入る
立ち上がっているコンテナに入りたい場合は docker-compose exec
を利用します。
# 構文
$ docker-compose exec サービス名 コマンド
# 実例
# チュートリアルでは laravel のサービス名は app になる
# artisanコマンドなど実行したい場合は以下
$ docker-compose exec app bash
# コンテナから抜けるときはexit
$ exit
実演
DB にアクセスしたい場合は、同様に exec
コマンドを使って、MySQLコンテナに入ります。
# Mysqlコンテナに入る
$ docker-compose exec db bash
# MySQLにログイン
$ mysql -u root -p
# 接続を終了する場合
$ exit
実演
5)停止
アプリケーションの各コンテナを落とすには docker-compose down
を利用します。
docker-compose stop
というコマンドもありますが、こちらは立ち上げたコンテナを消さないで保持するコマンドです。こちらは基本的に使いません。
down
の場合、立ち上げたコンテナを消してますが、コンテナを消しているだけでイメージは消していません。
# 停止かつコンテナ削除
$ docker-compose down
実演
Docker Composeにおける各種ファイルの変更時の反映について
docker-compose.yml変更を反映
・イメージ:再構築の必要なし
・コンテナ:再構築の必要あり:docker-compose up -d
Dockerfileの変更を反映
・イメージ:再構築の必要あり:docker-compose build
・コンテナ:再構築の必要あり:docker-compose up -d
一度、 build ディレクトリで指定したものは、 docker-compose up -d したときに build はスキップされます。
Dockerfileに変更を加えたときは docker-compose build し直さないと反映されません。(※PHPの設定ファイル "php.ini" や Apacheの設定ファイル "000-default.conf" に変更を加えたときも同様)
$ docker-compose build
$ docker-compose up -d
# ワンライナーでもOK
$ docker-compose up -d --build
ミドルウェア等の設定変更を反映
・イメージ:再構築の必要あり:docker-compose build
・コンテナ:再構築の必要あり:docker-compose up -d
DockerコンテナにMySQLダンプのインポート
稼働しているサーバからダンプファイルを抽出します。
$ mysqldump -u ユーザ名 -pパスワード DB名 > dump.sql
ダンプしたファイルは docker-compose.yml と同じディレクトリに設置します。
以下、ダンプファイルをインポートするまでの手順です。
### Dockerコンテナにdumpファイルをコピー
# laravel_db → MySQLを動かすコンテナ
# コピー先はMySQLコンテナの /tmp/ 直下になる
# 構文
$ docker cp ローカルファイル MySQLコンテナ名:保存先のパス
# 例
$ docker cp dump.sql laravel_db:/tmp/dump.sql
### MySQLコンテナに入る + bash起動
$ docker-compose exec db bash
### インポート
root@123456789:/# mysql -u laravel_user -plaravel_pass laravel_db < /tmp/dump.sql
実演
Dockerコンテナ内でエラーログの確認(php-apache)
PHP 用の Apache イメージ(php-apache)でコンテナを作成した場合、Apache のエラーログ(/var/log/httpd/error_log もしくは /var/log/apache2/error_log)では確認できません。
[root@example ~]# cd /var/log/httpd
[root@example ~]# tail -f error_log
実演
以下の docker コマンドを打つとアクセスログは確認することができます。
# コンテナ名を確認
$ docker container ls
# アクセスログをリアルタイムに確認
$ docker-compose logs -f コンテナ名
実演
以上です。
自宅ではじめるDocker入門
Docker関連の数ある本でも、図や丁寧な解説で「わかりやすい」と評判がいい本です。コマンドを叩きながら、Dockerにおける「イメージ」「コンテナ」が理解できます。まだ、Kindle版が出てないのは惜しいですが、Docker入門としておススメの1冊です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。