Laravel + Vue.js + DDDのすゝめ – MySQLをインストールする

Laravel + Vue.js + DDDのすゝめ – MySQLをインストールする

データベースにはPHPとセットで採用されることが多いMySQLを使って構築します。
実際は要件に応じて必要な機能を持つデータベースを採用します。

連載

本記事は複数記事の連載記事の1つです。

この記事に関連するコミット

コンテナ生成時に自動的にクエリを実行する

MySQLのコンテナは、/docker-entrypoint-initdb.dに配置したSQLファイルをコンテナを生成するタイミングで実行してくれます。
/docker/db/initdb.dを/docker-entrypoint-initdb.dにマウントしているため、実行したいSQLを保存しておけば自動的に実行されます。

データベースクライアントの接続設定

DBeaverで接続する例です。
Dockerでは3306ポートをマウントしているため、localhostの3306ポートに接続しようとすれば、dbコンテナに接続できます。

DBeaverでは、そのまま接続しようとするとPublic Key Retrieval is not allowedとエラーが表示されます。
「ドライバのプロパティ」からallow PublicKeyRetrievalをTrueに変更します。 「テスト接続」をクリックして接続済みが確認できればOKです。

Laravelのデータベース接続設定

Laravelのデータベース接続情報は.envに記載します。
.envがない場合は.env.exampleをコピーしてリネームします。

ポイントは、DB_HOSTの値をdbにすることです。 LaravelではDB用の別コンテナを接続先に指定するには「コンテナ名」を指定します。

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=develop
DB_USERNAME=root
DB_PASSWORD=root

マイグレーションを実行する

データベースのテーブルの作成・更新はマイグレーションで管理します。

以下コマンドが基本のマイグレーション実行コマンドです。

php artisan migrate

実行すると、以下のエラーに発生します。

could not find driver (SQL: select * from information_schema.tables where table_schema = develop and table_name = migrations and table_type = ‘BASE TABLE’)

これは、PHPのExtensionにMySQL用のPDOドライバがインストールされていないときに表示されます。
続けて解消していきます。

Dockerfile PHP Extensionのインストール

コンテナ環境下なのでDockerfileにPHP Extensionをインストールする定義を追加します。

PHP公式のPHPコンテナでは、Extensionインストールコマンドが用意されているので、追加したいExtension名を入れるだけでOKです。

Extensionの一覧

GitHub: mlocati/docker-php-extension-installer https://github.com/mlocati/docker-php-extension-installer

RUN docker-php-ext-install pdo_mysql

プログラミングカテゴリの最新記事