Dots

ブログとか

docker build 高速化&イメージ最適化のtips


docker buildは速く、docker imageは小さいほうが良い

🛠️ 開発サイクルの短縮

☁️ クラウドリソースのコスト最適化

🚀 本番環境でのデプロイ・起動速度向上

🔐 セキュリティと保守性の向上

高速化・最適化 tips 一覧

Dockerイメージを速く・小さくするためにやること。

tips 効果 説明
.dockerignore の活用 イメージ最適化 .dockerignore でテスト・ドキュメント・node_modules などを除外
不要ファイルの除外・クリーンアップ イメージ最適化 RUN rm -rf /var/lib/apt/lists/* などで不要ファイルを削除
軽量なベースイメージの選定 イメージ最適化 Alpine や slim 版などの軽量イメージを利用し、必要なパッケージのみ追加
レイヤーキャッシュ ビルド高速化 Dockerfile の命令ごとにキャッシュが効くように設計し、依存インストールを前に配置する
BuildKit キャッシュ ビルド高速化 BuildKit の –mount=type=cache で pip/npm などのキャッシュを活用
GitHub Actions でのキャッシュ CI/CD高速化 actions/cache で依存パッケージやビルド成果物を永続化・共有
マルチステージビルド ビルド高速化 & イメージ最適化 ビルド用と実行用のステージを分け、最終イメージに必要なものだけを残す

キャッシュの種類と保存場所について

Docker image のビルドを高速化する際に利用できる、いろいろなキャッシュ。

キャッシュ種別 主な用途・特徴 保存場所・管理方法 備考
レイヤーキャッシュ Dockerfile 各命令の結果をキャッシュ。再ビルドを短縮 ローカル Docker デーモン COPY, RUN など
BuildKit キャッシュ ビルド時の依存や中間成果物を細かくキャッシュ ローカル/外部ストレージ(BuildKit) --mount=type=cache
パッケージマネージャキャッシュ docker使用時に限らず存在する、npm/pip など依存パッケージのダウンロードキャッシュ 各パッケージマネージャのキャッシュディレクトリ ~/.npm, ~/.cache/pip など
CI/CD キャッシュ CI/CD 環境でのビルド成果物や依存キャッシュの永続化 actions/cache など CI/CD のストレージ GitHub Actions でのキャッシュなど
マルチステージビルド ビルド用と実行用を分離し不要ファイルを含めない - COPY --from=build ... で成果物のみ

.dockerignore の活用

docker build 時に「ビルドコンテキスト」に含めたくないファイルやディレクトリを除外する。

不要ファイルのクリーンアップ

ソースコードをビルドした後などに、不要となったファイルやキャッシュを削除してイメージを小さくする方法。

軽量なベースイメージの選定

imageサイズが小さいと様々なメリットがあるので、状況が許す限り軽量なベースイメージを選ぶ。

よくある軽量ベースイメージ

使い方

レイヤーキャッシュ

使い方

レイヤーキャッシュのヒット条件

キャッシュの無効化・クリア方法

注意点

BuildKit キャッシュ

使い方

キャッシュの無効化・クリア方法

注意点

GitHub Actions (CI) でのキャッシュ

使い方

キャッシュの無効化・クリア方法

注意点

マルチステージビルド

使い方