以前書いた
Docker MySQL公式イメージを使用してDBに初期データを流し込む
http://qiita.com/furu8ma/items/75e5b1df29fef04ec7f1
のPostgreSQL版です。
まったく同じ手順で初期データを流し込めます。
公式イメージのありか
https://hub.docker.com/_/postgres/
まずはdocker-compose.yml
個人的好みでalpine版を使っていますが、docker-entrypoint.sh
を見る限り debian版でも同じ挙動のはずです。
ただ、alpine版は約40MB, debian版は270MB...
version: "3"
services:
database:
image: postgres:9.6-alpine
volumes:
- database:/var/lib/postgresql/data
- ./postgres:/docker-entrypoint-initdb.d
environment:
- POSTGRES_USER=root
- POSTGRES_PASSWORD=password
ports:
- 3306:3306
volumes:
database:
external: false
注意点としてpostgreSQLのデータ格納領域にvolumeを使用します。そうしないと docker for windowsの場合、postgreSQLが正常に起動しないためです。ホストOSがMacOSやLinux系なら直接ローカルディレクトリをマウントしても問題ないはずです。ホストOSのファイルシステムの違いのためでしょうか。Ubuntu on Windowsを使っても解決しないのがつらいところです。Microsoft先生よろしくお願いいたします。m(__)m
./postgres/にDBクリエイト用SQLやらインポート用シェルやらを置きます。
数字のプレフィクスをつけて実行順をコントロールするのもMySQLと同じHackです。
+ docker-commpose.yml
+- postgres/
+ 1_create_db.sql
+ 2_import.sh
+ dump1.gz
cd /docker-entrypoint-initdb.d/
echo "import data1..."
gzip -dc ./dump1.gz | psql -h localhost -U root -d db1
echo "done."
注意点はDockerfileなりで~/.pgpassが事前に配置されていること
これで、docker-compose up
で初回起動時にデータが投入されます。
MySQLのイメージと挙動が一緒というのがありがたし。
参考になれば。