18
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

docker-composeでLaravel開発環境を構築する ~③MySQLコンテナの作成と接続確認~

Last updated at Posted at 2023-04-25

はじめに

業務でLaravelの開発環境をdocker-composeで構築することがありました。
しかし詳しいことは全く知らなかったので、自分で1から作ってみようと思います。

環境はWEB(nginx)PHPDB(MySQL)サーバーの構成となります。

今回は目次の6についてです。
1、2に関してはこちら、3、4、5についてはこちらをご覧ください。

目次

 1. docker-compose.ymlについて
 2. 必要なディレクトリ、ファイルの準備
 3. nginxコンテナの作成
 4. PHPコンテナの作成
 5. Laravelプロジェクトの作成
 6. MySQLコンテナの作成 → 今回はここ
 

MySQLコンテナの作成

それでは、MySQLコンテナの作成をしていきます。
前回作成したdbディレクトリ配下にある、Dockerfilemy.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の作成

文字コードの設定を定義します。

~/laravel/docker/db/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.ymlMySQLコンテナを定義します。

~/laravel/docker/docker-compose.yml
# 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ファイルにも設定します。

~/src/.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を選択します。
③ 次へボタンをクリックします。
スクリーンショット 2023-04-20 9.13.21.png
Databaseユーザー名パスワードにそれぞれdocker-compose.ymlで指定した環境変数(Laravelプロジェクト内のenvファイルに設定した値)を入力します。
⑤ テスト接続ボタンをクリックします。
image.png

【補足】
④の工程でServer Hostにはlocalhostと記載しました。
他の項目と同じようにdocker-compose.ymlで指定した環境変数を記載しなかったのは、
3.docker-compose.ymlの作成でポートの対応付け(ポートフォワーディング)をしているためです。

~/laravel/docker/docker-compose.yml
    # ホストとコンテナのポート番号の対応付け
    ports:
      - "3306:3306"

このようにdocker-compose.ymlに設定することで、ホストのポート番号3306に接続するとコンテナのポート番号3306に接続されます。
つまりSQLクライアントでホストをLocalhost、ポートを3306で指定すれば、コンテナに接続されるということです。

⑥ 無事に接続できたことが確認できました。OKボタンでダイアログを閉じます。
image.png
⑦ テーブルリストにも先ほどマイグレーションしたテーブルが確認できました。
image.png

まとめ

今回はMySQLのコンテナ作成と接続確認を行いました!
これでdocker-composenginxPHPMySQL3つのコンテナを作成して、Laravelの開発環境を構築することができました。
今回は基本的な設定のみで環境構築を行いました。
まだまだdocker-composeでできることはたくさんあると思うので、一つずつ勉強していきたいと思います!

参考

18
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?