PostgreSQL
Docker

Docker PostgreSQL公式イメージを使用してDBに初期データを流し込む

More than 1 year has passed since last update.

以前書いた


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...


docker-compose.yml

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


2_import.sh

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のイメージと挙動が一緒というのがありがたし。

参考になれば。