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コマンドをたたく。