テストおよび開発用の一時データベースの構築


TL;DR



初期データをボリュームに追加し、renew anon volumes 引数 (-V) を指定して docker-compose を実行します.

序章



システムを構築したので、今度はそれをテストするときです.または、デモを実行したいので、すべてを特定の状態に設定する必要があります.残念ながら、いくつかの変更をテストしていたところ、データベースをクリーンアップするか、さらに悪いことに、データベースを目的の状態にするためだけに一連のアクションを実行する必要があります.

幸いなことに、生活を楽にするためにできるいくつかの行動があります.

これらの次のヒントは、docker と docker compose がインストールされていることを前提としています.これらがソリューションのバックボーンになるからです.

ステップ 1 - Docker を使用した空のデータベース



実行可能なデータベースの開発を開始したいだけだとしましょう.おそらく、ORM 1 ソリューションで遊んでいるとします.空のデータベースは非常に便利です.

次の docker コマンドは、postgres のトリックを実行できます.

docker run -e POSTGRES_USER=my_user -e POSTGRES_PASSWORD=my_password -e POSTGRES_DB=some_db postgres:13 


一言で言えば、心ゆくまでアクセス可能なデータベースがあります.

ステップ 2 - 初期データと Docker を含むデータベース



データのないデータベースも良いですが、既にセットアップされたデータベースはさらに良いものです.そのために、volumes とデータベース ダンプの初期データを使用できます. postgres イメージの [初期化スクリプト セクション] は、dump を/docker-entrypoint-initdb.d/フォルダーにコピーするだけでよいことを示しています.

これは、次の引数で行われます.

--mount type=bind,source=/some/path/my_dump.sql,target=/docker-entrypoint-initdb.d/dump.sql 


したがって、完全なコマンドは次のようになります

docker run -e POSTGRES_USER=my_user -e POSTGRES_PASSWORD=my_password -e POSTGRES_DB=some_db  --mount type=bind,source=/some/path/my_dump.sql,target=/docker-entrypoint-initdb.d/dump.sql  postgres:13 


ステップ 3 - docker-compose で整理する



Docker は便利ですが、docker-compose を使用すると管理が容易になります.

2 つのトリックを使用すると、手間をかけずにデータベースを一時的に実行できます.

ステップ 3.1 docker を docker-compose yaml に変換する



コマンドラインの引数を構成ファイルに追加しましょう.

# docker-compose.yml
version: "3"
services:
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: "my_password"
      POSTGRES_USER: "my_user"
      POSTGRES_DB: "some_db"
    volumes:
      -  ./some/path/my_dump.sql:/docker-entrypoint-initdb.d/my_dump.sql


これは非常に素晴らしいです.次のコマンドで実行すると、データベースは以前と同じになります.

docker-compose up



ステップ 3.2 データベースが同じままであることを確認する



前のコマンドを実行してレコードを削除すると、次回はそのレコードが失われます.これは、テスト、デモ、または一般的な開発には望ましくない場合があります.毎回同じ環境にいるととても落ち着きます.

これを達成するには、ボリュームを更新する必要があります. compose docs から引数 -V を指定して実行すると、次のように表示されます.

-V, --renew-anon-volumes Recreate anonymous volumes instead of retrieving data from the previous containers.



これにより、データベースを開始するコマンドは次のようになります.

docker-compose up -V db


ここで、初期データをいくつか削除して再度コマンドを実行すると、元の状態に戻ります.

皆さんのお役に立てば幸いです.



Object Relational Mapping