仕事

Docker上のMySQLのDBコンテナにLaravelコンテナ、phpMyAdminコンテナとロカールPCのDBeaverから接続する

2022年11月4日


Laravelローカル環境構築を無事終えて、Docker上にMySQLのデータベースをコンテナ内に作成できたら次はそのデータベースに接続できるように設定する必要がある。これをしないとデータベースのコンテナが動いていても、php artisan migrateコマンドでデータベースにテーブルを作成できない。

ということで今回はlaravelのコンテナとphpMyAdminのコンテナ、ローカルPC上のDBeaverからMySQLのコンテナに接続する方法を解説する。

どうも、スニーキーです

前提

Docker Composeを使用して、下記のコンテナが起動されていること。

  • Laravelを動かすコンテナ
  • MySQLを動かすコンテナ
  • phpMyAdminを動かすコンテナ
  • ローカルPC上にDBeaverがインストール済み

上記のローカル環境構築がまだな方はこちらを参考すればOK。(⇒DockerでLaravelローカル環境構築する方法)

ゴール


phpMyAdminに関しては、コンテナが起動していて接続情報間違ってなければもうつながるはず。
(⇒http://localhost:8080/ でphpMyAdminからMySQLのコンテナに接続)

DBに接続するクライアントツールはなんでもOK。phpMyAdminはMySQLサーバーをウェブブラウザで管理するためのデータベース接続クライアントツールなので、DBeaverなどのソフトをインストールしなくても使えるので最強。

Laravelが動くコンテナからMySQLのデータベースが動くコンテナに接続

超簡単です。やることはLaravelの.envファイルにDB接続の設定をするだけ。docker-compose.ymlファイルmysqlコンテナで定義したデータベース情報と同じ値を設定する。
※Laravelの場合はデータベースへの接続情報を.envファイルに定義します。
※注意点としては.envファイルは基本pushしないファイルなので、git管理下にない。なので流れは以下

  • 1. .env.exampleファイルに設定をする
  • 2. cp .env.example .envコマンドを実行

1. .env.exampleファイルに設定をする

DB_CONNECTION=mysql
DB_HOST=laravel_db // mysqlコンテナのサービス名
DB_PORT=3306 
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=laravel_pass

docker-compose.ymlを元に.env.exampleを設定する。

docker-compose.yml

db:
   # Docker HubからMySQL5.7の公式イメージをダウンロードしてくる指定
   image: mysql:5.7
   container_name: laravel_db

   # コンテナ内の環境変数を指定。環境変数を渡すとビルド時に設定してくれるDockerイメージがあるので、利用の際はDocker Hubのサイトで確認する
   environment:
     MYSQL_ROOT_PASSWORD: root
     MYSQL_DATABASE: laravel_db
     MYSQL_USER: laravel_user
     MYSQL_PASSWORD: laravel_pass
     TZ: 'Asia/Tokyo'

   # 起動時のコマンド
   command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
   # ディレクトリ同期。設定ファイルとMySQLのデータが保存される場所を同期している。コンテナは基本的に起動時に変更されてもコンテナ自体が止まるとデータが消えてしまうため、保存しておきたいものはホストマシンと同期しておく必要がある。
   volumes:
     - ./docker/db/data:/var/lib/mysql
     - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
   ports:
     - 3306:3306

2. cp .env.example .envコマンドを実行

# appコンテナ(名称:laravel_app)に入る
$ winpty docker-compose exec app bash
root@390cfc38dae:var/www/html# [コマンド]

# Laravelプロジェクト移動
$ cd practicedocker

# .env.exampleの中身をコピーして.envを上書き
$ cp .env.example .env

$ php artisan key:generate

$ php artisan migrate 

 

接続確認


appコンテナ内でphp artisan migrateコマンドが実行できれば成功。

Docker上のMySQLにDBクライアントの「DBeaver」から接続


mysqlを選択。

サーバーホストには「127.0.0.1」でもOK。

接続されれば成功!これでappのコンテナ内のアプリのディレクトリ配下でartisanコマンドでテーブルを作成できるし、DBクライアントツールで操作もできる。

PS C:\Data\WebSite\PracticeDocker> docker-compose exec app bash
root@2902v23dsa4a:/var/www/html# cd practicedocker 
root@2902v23dsa4a:/var/www/html/practicedocker# ここでartisanコマンドをたたく。


-仕事