docker-composeの私的最適解

この記事は約2分で読めます。
スポンサーリンク

docker-composeを作る際の構成に非常に悩んだ末その最適解を導き出しました。

Dockerfileでできることでもdocker-compose.ymlにかけるものも存在していて、どちらに書くべきか。
ENVをDockerfileに記述するか、docker-compose.ymlでenvironmentで記載するか。
DockerfileでCOPYでファイルをimageに組み込むか、volumeマウントで読み込ませるか。
この辺りに非常に悩みました。

結論としては、「できる限りオリジナルのimageを使いまわせるようにする」とした。
この方が、無駄にimageが作成されずデータ容量を圧迫せずに済むからです。

DockerfileでFROMを利用してimageに対してRUNなどをしてカスタマイズしていくと、毎回それでimageファイルが作成されてしまう。複数のコンテナを運用している場合、カスタマイズされたimageデータで圧迫されてしまう。

なので、ENVやCOPYを行うだけの場合には、docker-composeファイルでenvironmentとvolumeで対応をするようにした。
こうすることでオリジナルのimageを使うため、imageファイルを無駄に増やさなくて済む。

COPYに関しては、マウントするより、直接データをimageに入れておいた方が速度的には良さそうだがそこまでではないので気にしないこととした。
他、マウントの方が、後で修正がある場合にはbuildし直さなくて済むのが楽だったりするので、追加や修正が多いものに関してはマウントの方が良さそう。

ちなみにENVに関しては、docker-compose.ymlで書いた方が上書きで優先される。
他のものに関してもそうだが、docker-composeの方がimageファイルの後で実行されるため、優先される。

RUNなどでデータを追加したりカスタマイズが多い場合のみDockerfileを利用し、簡単な設定で事足りるものに関してはdocker-composeで処理する。
これが最適かなと思いました。

docker-composeのリファレンスがあるので読んでみると面白いです
https://docs.docker.jp/compose/compose-file/

コメント

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