Dockerfileで、同じ行を繰り返し書かずに済む方法

テーマ、知りたいこと

作るコンテナによって、Dockerfileでのビルド順を入れ替えたいような場合に、合理的に書く方法

背景、状況

ローカルと本番運用などのように、同じDockerfileから何種類かのイメージを作成する場合に、キャッシュの合理化、イメージ作成の効率を考えると、順番を前後させたほうがいい場合がありえます。

具体例として、Debian環境で動いているRailsアプリケーションがあって、イメージ作成時に「Railsサイドでキャッシュ生成をやりたい」かつ「Railsのコンソールだけ動かすときには不要だけど、アプリケーションとして動かすには必要なaptパッケージがある」状況だとします。

この場合に、

  • ローカル→Gemfileの変化が頻繁なので、aptを全部そろえてからbundle install→キャッシュ生成
  • 本番→Railsのキャッシュ生成とapt installを並列してやれれば合理的なので、マルチステージでbundle installとaptを分ける

のようにするのが合理的となります。この場合に、同じRUN行を2回書くと管理も煩雑となりますので、一度で済ませられればと思いました。

考えたこと

  • パッケージについては、リストをファイル化してxargsで流す
  • 複雑なコマンドについては、シェルスクリプト化してそちらを呼び出す

ような方法は思いついたのですが、RUNにセットするキャッシュなどのオプションが、これでは共通化できないという状況です。

コメントを投稿

0 コメント