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

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

 

 

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

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

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

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

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

 

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アプリケーションの設定ファイルの一つで、
DB_何ちゃらで始まっている部分がデータベースに関する情報を取り扱うデータ定義である。




マイグレーションファイルの作成

次にテーブル作成の定義ファイルである、マイグレーションファイルを作成する。
以下の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テーブルを作成)。

 

以上で手順は完了。

 

 

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

コメントを残す

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