DockerのOfficial imageのMySQLを使って初回起動時にカスタムSQLを実行させる

DockerのOfficial RepositoriesMySQLを使って、初回のDBデータ作成時に、カスタムSQLを実行する。

MySQLイメージは起動時にMySQLデータディレクトリ(/var/lib/mysql)の中身がない場合、mysql_install_dbなどが実行されます。その処理の中で、 /docker-entrypoint-initdb.dディレクトリにシェルスクリプトや、SQLが存在する場合、それを実行してくれる仕組みがあります。

サンプル

サンプルとして、Docker Composeを使って、PHPMyAdminとMySQLサーバを構築してみます。
その際、初回起動時に2つのデータベースと1つのテーブルを作成します。
うち1つは環境変数MYSQL_DATABASEをセットすることによって自動的に作成されるデータベース、それ以外がdocker-entrypoint-initdb.dによるものです。

ローカルにinitdb.dフォルダを作成し、それをMySQLイメージ中のdocker-entrypoint-initdb.dにマウントさせます。

initdb.dフォルダには、create_another_db.shとcreate_table_in_exampledb.sqlを置いておきます。

docker-compose upでMySQLが立ち上がると、最後にそれらのファイルが実行されます。

create_another_db.shはDBを新規作成します。シェルなので、環境変数を参照できます。
MySQLへの流し込み方法は、docker-entrypoint.shを参考にパスワードを追記した形です。

create_table_in_exampledb.sqlは環境変数MYSQL_DATABASEによって既に作成されているDBに対してテーブルを作成します。

全部入りはこちら→mistymagich/docker-mysql-sample

参考

広告

コメント1件

  1. ピンバック: 【PHP入門】Docker でローカル開発環境を構築する | SONICMOOV LAB

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中