Docker Hub にある MySQL イメージは、コンテナの初回の起動時(ボリューム生成時?)に Docker で生成される DB に対して処理を行うことができます。
処理内容は、MySQL コンテナ内の /docker-entrypoint-initdb.d
以下に設置されている .sql
, .sh
, .sql.gz
の拡張子を持つファイルを実行するものになります。
実行順序はファイル名順です。
オフィシャルな説明は下記をどうぞ。
https://docs.docker.com/samples/library/mysql/#initializing-a-fresh-instance
使用例
一般的な Docker での MySQL の使用例は、Docker Compose で MySQLを構築 を参照。
起動時に DB 処理を行いたい場合には、上記に加えて、まずは以下のように /docker-entrypoint-initdb.d を mount します。
db: volumes: - ./initdb.d:/docker-entrypoint-initdb.d
次に、initdb.d/ 以下に実行したいファイルを置きます。
例えば、下記のようなファイルを作成します。
CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARACTER SET utf8;
use testdb;
CREATE TABLE users (
....
docker-compose up してコンテナを生成/起動すると、起動時に上記の SQL が実行されます。
なお、docker-compose.yml で MYSQL_DATABASE 変数を設定しておけば、単純な create database は不要になり、その後の SQL の実行でも MYSQL_DATABASE を参照してくれるので use … は不要になります。
コメント