LoginSignup
10
13

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-08-09

以前書いた

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

参考になれば。

10
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13