aobako.net

マルチステージビルドがいい感じ

July 17, 2020

Dockerイメージを作るときに,今まであれこれ工夫をしてサイズの削減に努めていた.

  • RUN コマンドをまとめてレイヤーを削減
  • ビルド用のパッケージのキャッシュをしない
  • ビルド後にパッケージを削除

など.

マルチステージビルドでビルド用のイメージとランタイム用のイメージを分割することで,前述の工夫は不要になる.

個人的には,次のように3段階でビルドするのがオススメ (python の例).

FROM hoge as base

# 引数を処理したり

# 環境変数をセットしたり

# WORKDIR をセットしたり

FROM base as builder

# ビルド用パッケージのインストール

# 仮想環境の作成

# 仮想環境にアプリの依存関係をインストール

FROM base as runtime

# builder イメージから仮想環境をまるまるコピー

# その他必要なファイルがあればとってくる

# アプリケーションの実行コマンドとか

場合によりけりだが,自分の場合はこれでイメージサイズが従来の半分以下になった.CircleCI で回したり,イメージをどこかのリポジトリにプッシュする必要がある場合,微妙にパフォーマンスの向上が期待できる.


© 2017-2021 syuni