Composeファイルを拡張する

Tech

みなさん、こんにちは。小林です。

今年のGWはどのように過ごされましたか?
私はコーディング三昧の毎日でした。(仕事じゃないですよ。趣味ですよ。)

新しい現場で困っていることがあったので、その回避方法を紹介したいと思います。
今回は、Dockerの話をします。

困っていること

実際に困っていることは、現場固有のものなので少しわかりやすくしていますが、こんな感じです。

  • 本番環境を再現するために、ローカル環境に大量のデータをインポートしないといけなくて、データの入れ替えに時間がかかってしまう。

回避策

Dockerを使用しているので、volumeの設定を切り替えることができればよいのではないか、と考えました。

Git管理されているComposeファイルは以下とします。

# compose.yml
version: "3"
services:
  db:
    image: postgres:14.6
    environment:
      (省略)
    volumes:
      - db_data:/var/lib/postgresql/data
volumes:
  db_data:

案1:Composeファイルを編集する

既存のComposeファイルを使用するデータに応じて書き換えるようにしました。

# compose.yml
version: "3"
services:
  db:
    image: postgres:14.6
    environment:
      (省略)
    volumes:
      - db_data_prod:/var/lib/postgresql/data
volumes:
  db_data_prod:

Git管理されている場合に差分として扱われてしまうので、気軽にgit add .できなくなってしまうので、微妙でした。

案2:Composeファイルをコピーする

既存のComposeファイルをコピーして、データに応じて使い分けるようにしました。

docker-compose -f compose.mine.yml up -d

さらに、グローバルの.gitignoreに該当ファイルを設定することで、案1の問題点も解消できました。

# compose.mine.yml
version: "3"
services:
  db:
    image: postgres:14.6
    environment:
      (省略)
    volumes:
      - db_data_prod:/var/lib/postgresql/data
volumes:
  db_data_prod:

もう少し上手くできないかな、と思って調べたところ、Composeファイルを上書きできるということがわかりました。

Composeファイルの内容を上書きする(compose.override.yml)

# compose.override.yml
version: "3"
services:
  db:
    volumes:
      - db_data_prod:/var/lib/postgresql/data
volumes:
  db_data_prod:

Composeファイルを複数指定した際に、各ファイルの内容が上書き・マージされるそうです。

docker-compose -f compose.yml -f compose.override.yml up -d

なので、最小限の設定を記載するだけ、案2と同じことができるようになります。

ちなみに、ファイル名をcompose.override.ymlにすると、-fオプションで指定しなくても、compose.ymlと一緒に読み込まれます。

参考

タイトルとURLをコピーしました