はじめに
業務でLaravel
の開発環境をdocker-compose
で構築することがありました。
しかし詳しいことは全く知らなかったので、自分で1から作ってみようと思います。
環境はWEB(nginx)
、PHP
、DB(MySQL)
サーバーの構成となります。
今回は目次の6についてです。
1、2に関してはこちら、3、4、5についてはこちらをご覧ください。
目次
1. docker-compose.ymlについて
2. 必要なディレクトリ、ファイルの準備
3. nginxコンテナの作成
4. PHPコンテナの作成
5. Laravelプロジェクトの作成
6. MySQLコンテナの作成 → 今回はここ
MySQLコンテナの作成
それでは、MySQL
コンテナの作成をしていきます。
前回作成したdb
ディレクトリ配下にある、Dockerfile
とmy.conf
に書き込みを行い、それに伴いdocker-compose.yml
にもコンテナについて定義していきます。
laravel
└── docker
├── docker-compose.yml --> 書き込み
├── web
│ ├── Dockerfile
│ └── default.conf
└── php
│ ├── Dockerfile
│ ├── php.ini
└── db
├── Dockerfile --> 書き込み
└── my.conf --> 書き込み
1. MySqlの設定ファイルmy.confの作成
文字コードの設定を定義します。
# 文字コードの指定
[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
2. Dockerfileの作成
コンテナ作成に必要なDockerfile
を作成します。
# ベースイメージの指定
FROM mysql:8.0
# 作成した設定ファイルをmysqlコンテナの設定ファイルにコピー
COPY ./db/my.conf /etc/my.conf
3. docker-compose.ymlの作成
上で作成したファイルを元にdocker-compose.yml
にMySQL
コンテナを定義します。
# docker-composeのバージョン
version: "3"
# コンテナの定義
services:
# nginxコンテナ
web:
### 省略 ###
# PHPコンテナ
php:
### 省略 ###
# DBコンテナ
db:
# コンテナ名
container_name: "db"
# コンテナ作成に使用するDockerfileのパス
build:
dockerfile: "./db/Dockerfile"
# ホストとコンテナのポート番号の対応付け
ports:
- "3306:3306"
# 環境変数の指定
environment:
- "MYSQL_ROOT_PASSWORD=password"
- "MYSQL_DATABASE=database"
- "MYSQL_USER=laravel"
- "MYSQL_PASSWORD=password"
# volumeをバインド
volumes:
- "./db/data:/var/lib/mysql"
以上でDB
コンテナを起動する準備ができました。
コマンドで起動をして、正常に起動したのを確認します。
$ docker compose up -d --build
[+] Running 4/4
⠿ Network docker_default Created
⠿ Container web Started
⠿ Container php Started
⠿ Container db Started
これでDB
コンテナ作成が完了しました。
ではLaravel
プロジェクトからDatabase
に接続できるよう設定してみましょう。
接続確認
先ほどdocker-compose.yml
で指定した環境変数を、Laravel
プロジェクト内のenv
ファイルにも設定します。
# 省略
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=laravel
DB_PASSWORD=password
# 省略
設定したら再度コンテナを立ち上げて、PHP
コンテナでマイグレーションを行います。
$ docker compose up -d --build
$ docker compose exec php bash
$ php artisan migrate
INFO Preparing database.
Creating migration table ................................... 129ms DONE
INFO Running migrations.
2014_10_12_000000_create_users_table ....................... 145ms DONE
2014_10_12_100000_create_password_reset_tokens_table ....... 161ms DONE
2019_08_19_000000_create_failed_jobs_table ................. 156ms DONE
2019_12_14_000001_create_personal_access_tokens_table ...... 209ms DONE
正常に接続ができ、マイグレーションできました。
SQLクライアントからも確認してみましょう。(ここではdbeaver
を使って接続してみます。)
① 新しい接続を作成するボタンをクリックします。
② 今回作成したDB
と同じMySQL
を選択します。
③ 次へボタンをクリックします。
④ Database
、ユーザー名
、パスワード
にそれぞれdocker-compose.yml
で指定した環境変数(Laravel
プロジェクト内のenv
ファイルに設定した値)を入力します。
⑤ テスト接続ボタンをクリックします。
【補足】
④の工程でServer Host
にはlocalhost
と記載しました。
他の項目と同じようにdocker-compose.yml
で指定した環境変数を記載しなかったのは、
3.docker-compose.ymlの作成でポートの対応付け(ポートフォワーディング)をしているためです。
# ホストとコンテナのポート番号の対応付け
ports:
- "3306:3306"
このようにdocker-compose.yml
に設定することで、ホストのポート番号3306
に接続するとコンテナのポート番号3306
に接続されます。
つまりSQLクライアントでホストをLocalhost
、ポートを3306
で指定すれば、コンテナに接続されるということです。
⑥ 無事に接続できたことが確認できました。OKボタンでダイアログを閉じます。
⑦ テーブルリストにも先ほどマイグレーションしたテーブルが確認できました。
まとめ
今回はMySQL
のコンテナ作成と接続確認を行いました!
これでdocker-compose
でnginx
、PHP
、MySQL
3つのコンテナを作成して、Laravel
の開発環境を構築することができました。
今回は基本的な設定のみで環境構築を行いました。
まだまだdocker-compose
でできることはたくさんあると思うので、一つずつ勉強していきたいと思います!
参考