Docker

DockerのMySQLコンテナに初期データを入れる方法【dumpファイルをセット】

DockerのMySQLコンテナに初期データを入れる方法【dumpファイルをセット】

DockerのMySQLコンテナに初期データとしてdumpファイルをセットしたいんだけどどうやるの?

この記事では、この疑問に対する答えをお伝えします。

少しでもDockerを使って開発を行う際の参考になれば幸いです。

バージョン情報

使用するMySQLのDockerイメージ:mysql:8.0

DockerのMySQLコンテナに初期データを入れる方法

結論から言うと、MySQLコンテナ内の/docker-entrypoint-initdb.dディレクトリ内にdumpファイルをセットすればOKです。

docker-comopse.yamlで書くとこんな感じ。

db:
  container_name: db
  image: mysql:5.7
  ports:
    - 3306:3306
  volumes: 
    - ./docker/db:/docker-entrypoint-initdb.d
  environment:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_DATABASE: database
    MYSQL_USER: user
    MYSQL_PASSWORD: pass

 

./docker/dbディレクトリ配下には初期データとして利用するdumpファイル(db.sql)が置かれており、そのdumpファイルをdocker-entrypoint-initdb.d配下にマウントしています。

 

実際にこの状態でコンテナを立ち上げてディレクトリ配下を見てみると、

docker-entrypoint-initdb.d配下にコピーできていることを確認

data.sqlが置かれています。

 

さらに、データベースを確認すると、

データベース内に初期テーブルが作成されていることを確認

 

dumpファイル内で定義してある初期データのテーブルが作成されています。

 

補足:初期データを登録できる理由

以下の説明にあるように、DockerのMySQLコンテナでは、起動時に/docker-entrypoint-initdb.d配下にあるファイルが実行されます。

そのため、ここにdumpファイルを置いておくことで起動時に初期データ(テーブル)が作成されます。

it will execute files with extensions .sh, .sql and .sql.gz that are found in /docker-entrypoint-initdb.d. Files will be executed in alphabetical order. You can easily populate your mysql services by mounting a SQL dump into that directory and provide custom images with contributed data.

/docker-entrypoint-initdb.d配下の.sh, .sql and .sql.gz拡張子を持つファイルがアルファベット順に実行されます。SQLのdumpファイルをこのディレクトリに置くことで、簡単に初期データをセットすることができます。

参考:Initializing a fresh instance

 

 

DockerのMySQLコンテナに初期データを入れる方法まとめ

今回はDockerのMySQLコンテナに初期データを入れる方法を解説しました。

初期データを入れるには、MySQLコンテナ内の/docker-entrypoint-initdb.dディレクトリ内にdumpファイルをセットすればOKです。

 

今回は以上となります。

少しでもDockerのMySQLを使って開発をする際の参考になっていれば幸いです。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA