気ままに

プログラム関連で困ったことを調べて気ままに投稿

docker compose でホストからダンプデータを実行する方法(コマンドライン)

docker compose のコマンドで、ダンプデータをいれる方法

docker composeで、postgresのコンテナを立ち上げて初期データやダンプデータを入れる方法についてメモ

docker のpostgresのコンテナを立ち上げる。 最低限の設定

Dockerfileは別に管理して、立ち上げるようにする。

version: "3.7"
services:
  db:
    build:
      context: ./docker
      dockerfile: Dockerfile.database
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: [postgresユーザ]
      POSTGRES_PASSWORD: [postgresパスワード]
      TZ: "Asia/Tokyo"
    volumes:
      - db:/var/lib/postgresql/data
      - ./docker/db/:/docker-entrypoint-initdb.d

[]の中は、適宜修正

      - ./docker/db/:/docker-entrypoint-initdb.d

ホスト側の./docker/db/フォルダに初回実行SQLを入れておくとcreatedbやらdocker compose buildした段階でやってくれる。 実行される順番は、ファイル名の昇順になっているので、01や1などをファイル名の先頭につけて、保存しておく。 必要なけれがコメントあうと。 rails などの migrationファイルが管理されている場合は、不要だけど、pgplsqlを使っている場合など、migrationだけでは対応できない処理がある場合は、 初期データを準備するのに便利。

FROM postgres:10.5
RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ENV LANG ja_JP.utf8

DBの最低限の情報だけ書いておく。基本、バージョンの10.5の部分だけ環境に合わせて変更。

上記の準備ができたら、コンテナの起動

$ docker-compose build
$ docker-compose up -d

docker-composeで、コンテンナの名前をdbにしたので、以下のコマンドでpostgresのDBへダンプデータを流し込む

$ docker-compose exec -T db psql -U [postgersユーザ] [db名]< dump.sql

わかればこれだけ?なんだけど、なれるまではdockerは難しい。

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門