PHP
docker
LaraDock
laravel5.6

LaradockのプロジェクトコンテナとMySQLコンテナを接続する方法

以前書いた、Laradorkを使用したLaravelプロジェクトの開発環境のまとめの続きです。
今回はLaravelプロジェクトのコンテナとMySQLのコンテナを接続してみます。

動作環境について

OS:macOS Sierra
version: 10.12.6

Docker(Engine):17.12.0-ce
Compose:1.18.0

git: 2.12.2

参考資料

laradockでlaravelの開発環境構築
Laradock/Documentation

環境構築方法

任意のDBを使える様に下記の通りlaradockディレクトリ側の「.env」ファイルを編集します。
「MYSQL_DATABASE」の値を変更します。
今回は「test_db1」というデータベースにしたいとします。

~/app/laradock $ vim .env
MYSQL_DATABASE=default
⇨MYSQL_DATABASE=test_db1

次にコンテナを起動させます。

~/app/laradock $ docker-compose up -d nginx mysql redis beanstalkd
Starting laradock_applications_1 ... 
Starting laradock_redis_1 ... 
Starting laradock_applications_1 ... done
Starting laradock_workspace_1 ... done
Starting laradock_php-fpm_1 ... done
Starting laradock_beanstalkd_1 ... 
Starting laradock_nginx_1 ... done

ワークスペースのコンテナに入ります。

~/app/laradock $ docker exec -it laradock_workspace_1 /bin/bash
root@e43ece0f6a55:/var/www# 

別タブでMySQLのコンテナに入ります。

~/app/laradock $ docker-compose exec mysql bash
root@34b570825d7f:/# 

*リファレンス通り上記のコマンドでは「mysql」と指定するすればコンテナに入れます。
ワークスペースのコンテナの場合は「laradock_workspace_1」と指定する必要があります。

MySQLコマンドを使って動作の確認をしてみます。

root@34b570825d7f:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.3-rc-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| default            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.02 sec)

mysql> 

ワークスペースのコンテナからMySQLにアクセス出来る様に専用のユーザーを作ります。

一旦ホスト側に戻り、コンテナ情報を取得するコマンドを打ちます。
IPアドレスが分かります。

~/app/laradock $ docker inspect e43ece0f6a55

"IPAddress": "IPアドレス",

ユーザーを作ります。

mysql> create user 'root'@'IPアドレス' identified by 'root';
Query OK, 0 rows affected (0.01 sec)

データベースを作ります。

mysql> create database test_db1 charset=utf8;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| default            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_db1           |
+--------------------+
6 rows in set (0.00 sec)

mysql> 

データベースが出来ました。

ワークスペースのコンテナに移り、マイグレーションをしてみます。

root@e43ece0f6a55:/var/www/test# php artisan make:migration test_db1_table
Created Migration: 2018_03_21_134052_test_db1_table

マイグレーションファイルを作成出来ました。

次に「test」ディレクトリ下にある「.env」を編集します。
データベースに関する記述を下記の通りに変更します。

root@e43ece0f6a55:/var/www/test# vim .env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=test_db1
DB_USERNAME=root
DB_PASSWORD=root

マイグレーションを実行します。

root@e43ece0f6a55:/var/www/test# php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table
Migrating: 2018_03_21_134052_test_db1_table
Migrated:  2018_03_21_134052_test_db1_table
root@e43ece0f6a55:/var/www/test# 

テーブルが出来ているかの確認を行います。

*「test_db1」のマイグレーションファイルは生成後に特に何も記述していない為、テーブルが出来ません。

mysql> use test_db1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+--------------------+
| Tables_in_test_db1 |
+--------------------+
| migrations         |
| password_resets    |
| users              |
+--------------------+
3 rows in set (0.01 sec)

mysql> 

テーブルが出来ました。

とりあえず、今回はここまで。
LaravelのプロジェクトコンテナとMysqlのコンテナを接続することが出来ました。