この組み合わせは、いま最も選ばれやすい組み合わせではないでしょうか。 この土台を作るだけでも選択肢や注意するべきポイントが沢山あって一苦労です。 プログラマーならコードで語れ!というように、ボイラープ…
データベースには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
コメントを書く