みなさん、こんにちは。小林です。
今年の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
と一緒に読み込まれます。