(Docker×Laravel) データベース作成〜マイグレーションする手順

(Docker×Laravel) データベース作成〜マイグレーションする手順

 

 

本記事では、
Docker×Laravelでマイグレーションする手順を掲載する。

 

前提としてdocker-composeを使用するので、
docker-composeが何か良くわからない方は下記記事を参考にして欲しい。

Docker Composeとは?使い方・メリットを解説

 

またデータベースはmysqlを使用していく。

Docker×Laravelでマイグレーションする手順

最初にDocker×Laravelでマイグレーションする手順をざっくりと紹介すると、
以下の様なステップになる。

Docker×Laravelでマイグレーションする手順
  1. DATABASEを作成する
  2. docker-compose.ymlを編集
  3. (Laravelアプリの).envを修正
  4. マイグレーションファイルの作成
  5. 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');
    }
}

 

(Laravel) マイグレーション実施手順

 

⑤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: 〜省略〜)」と言うエラーが出てしまう。

php-migration-error-php-network-getaddresses

 

マイグレーションに成功すると、マイグレーションファイルの定義に基づきテーブルが作成される(下記はskillsテーブルとcharactersテーブルを作成)。

マイグレーション成功時の画像

 

以上でocker×Laravelでマイグレーションする手順は完了。

 

関連記事

(Laravel) マイグレーション実施手順
laravel-migration-foreign-key-constraint
docker-laravel-migration-could-not-find-driver

 

https://readouble.com/laravel/4.2/ja/migrations.html

https://www.docker.com/

 

 

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。