本記事では、
Docker×Laravelでマイグレーションする手順を掲載する。
前提としてdocker-composeを使用するので、
docker-composeが何か良くわからない方は下記記事を参考にして欲しい。
またデータベースはmysqlを使用していく。
Docker×Laravelでマイグレーションする手順
最初にDocker×Laravelでマイグレーションする手順をざっくりと紹介すると、
以下の様なステップになる。
- DATABASEを作成する
- docker-compose.ymlを編集
- (Laravelアプリの).envを修正
- マイグレーションファイルの作成
- phpコンテナにログイン、マイグレーションを実行する
では具体的に解説していく。
①DATABASEを作成する
最初にデータベースを作成する。
mysqlコンテナを立ち上げて、mysqlコンテナの中にログインする。
docker container exec -it [mysqlコンテナ名] /bin/bash
mysqlにログインする。
mysql -u root -p
#パスワードを入力
以下のmysqlコマンドでデータベースを作成する。
> CREATE DATABASE [データベース名];
データベースが作成されたかどうかは以下のmysqlコマンドで確認できる。
> SHOW DATABASES;
データベースが作成されていればOK。
②docker-compose.ymlを編集
次に、
docker-compose.ymlファイルを編集する。
#docker-compose.yml
services:
php:
image: php:7.3-apache
volumes:
- ./php.ini:/usr/local/etc/php/php.ini
- ./html:/var/www/html
ports:
- 8888:80
mysql:
image: mysql:5.7
volumes:
- ./mysql:/var/lib/mysql #データの永続化
environment:
- MYSQL_DATABASE=[データベース名]
- MYSQL_ROOT_PASSWORD=[mysqlのrootユーザのパスワード]
見方として重要なのは下記ポイント。
phpサービスに関して
- volumesはデータの永続化をする設定なので忘れずに記載しておくこと。
mysqlサービスに関して
- volumesはデータの永続化をする設定なので忘れずに記載しておくこと。
- environmentのMYSQL_DATABASEには 、作成したデータベース名を指定すること。
③(Laravelアプリの).envを修正
次に、
docker-compose.ymlに記載した情報を元に、
Laravelアプリの直下に存在する、「.envファイル」を修正していく。
#.env
DB_CONNECTION=mysql
DB_HOST=mysql #docker-composeのmysqlのサービス名
DB_PORT=3306
DB_DATABASE=[データベース名]
DB_USERNAME=root
DB_PASSWORD=[mysqlのrootユーザのパスワード]
.envファイルは、laravelアプリケーションの設定ファイルの一つで、
データベースに関する情報を取り扱うデータを定義するファイルである。
④マイグレーションファイルの作成
次に、テーブル作成の定義ファイルである、
マイグレーションファイルを作成する。
マイグレーションファイルは、
以下のlaravelのartisanコマンドで作成する。
php artisan make:migration create_[※テーブル名]_table
- テーブル名は複数形にする点に注意。
- 作成されたマイグレーションファイルは、/database/migrations配下に格納される。
マイグレーションファイルに、テーブル定義を記載する
マイグレーションファイルには、デフォルトで、
up()メソッドとdown()メソッドが書いてある。
そのうち、
up()メソッドが作成するテーブルの定義を書くメソッドである。
作成するカラム毎に、「$table->型(カラム名)->(制約);」と言う書式で定義を記載していく。
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
⑤phpコンテナにログイン、マイグレーションを実行する
上記までで設定は完了なので、
最後にphpコンテナの中でマイグレーションを実行する。
#phpコンテナにログイン
docker container exec -it [phpコンテナ名] /bin/bash
#(コンテナ内の)Laravelアプリのルート階層にてマイグレーションを実行
php artisan migrate
※コンテナの中でマイグレーションを行わないと、「SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known (SQL: 〜省略〜)」と言うエラーが出てしまう。
マイグレーションに成功すると、マイグレーションファイルの定義に基づきテーブルが作成される(下記はskillsテーブルとcharactersテーブルを作成)。

以上でocker×Laravelでマイグレーションする手順は完了。
関連記事
https://readouble.com/laravel/4.2/ja/migrations.html