819 Views
January 18, 24
スライド概要
1/9 Dockerイメージサイズの 軽減について
Dockerイメージサイズを小さくするメリット ・イメージのbuild、pushやコンテナのbuildが早くなるので、 CI/CDに効果的 ・リポジトリからのイメージのコピーが早くなるため、 障害からの復旧が早まる 2/9
Dockerイメージのサイズについて 3/9 Dockerイメージのサイズは、大まかにイメージレイヤの数と イメージ内のファイルシステムの容量で決まる CMD ["node", "src/index.js"] app src RUN yarn install --production usr COPY . . WORKDIR /app / Dockerイメージ lib RUN apk add –no-cache python g++ make lang bin FROM node:12-alpine Dockerfile内のコマンドが 多いほど大きい prod イメージ内のファイルが 多いほど大きい
イメージレイヤ削減によるサイズ軽減? RUNコマンドを一つにまとめることで、イメージレイヤを減らすと イメージが軽くなる? 計35.92MB 今回のケースでは、イメージレイヤ数による差は見られなかった 4/9
.dockerignore削減によるサイズ軽減 5/9 ビルドコンテキストに.dockerignoreを配置することで、 不要なファイルがイメージ内に含まれないようにする Ignore前の イメージサイズ ビルドコンテキストのルートに配置し、 相対パスでファイル名を記載する。 記載されたファイル・ディレクトリは、 COPYやADDコマンドで無視される Volumeによるファイル同期は 問題なく行われる ignore後の イメージサイズ
Multi staging buildによるサイズ軽減 6/9 必要なファイルのみ抽出しつつイメージビルドを行うことで、 最終的なイメージサイズを小さくする コードビルド コード実行 コードのビルド(バイナリ化)と 実行を一度に行う場合
Multi staging buildによる担当分割 7/9 コードをビルドするイメージとコードを実行するイメージに 分割し、最終的なイメージを小さくする Builderから コピーしたバイナリ models src go Builder Go+alpine / alpine app src middle ware data base go build Runner alpine app / alpine binary builderイメージ runnerイメージ binary
Multi staging buildによるサイズ変化 コードの実行にのみ必要なファイルがイメージに残るため、 イメージサイズが大幅に小さくなる Multi stagingなし Multi stagingあり 特に、Golangは実行ファイルがバイナリであるため、 高い効果が期待される 8/9
Dockerイメージサイズを小さくするメリット ・.dockerignoreとmulti staging buildを組み合わせることで、 Dockerイメージの削減が見込める ・イメージレイヤの削減によるイメージ軽量化については要検証 ・goやjavascriptなど、コードのビルドが必要な場合は、 特にMulti staging buildによるサイズ軽減が見込める 9/9