dockerfile-optimise について
Dockerfileの作成、レビュー、コンテナイメージのビルドを行う開発者向けの最適化ガイドです。Docker公式ドキュメントのみを根拠とする48のルールを影響度順に並べ、キャッシュ、イメージサイズ、安全性、検証を扱います。
主な機能
- 018カテゴリにわたる48のルール
- 02影響度順に並んだガイダンス
- 03レイヤーキャッシュとマルチステージビルド
- 04イメージ選択とビルドコンテキスト
- 05シークレット、依存関係、検証
活用シーン
- 01Dockerビルド時間の最適化
- 02コンテナイメージサイズの削減
- 03Dockerfileのセキュリティプラクティスの確認
- 04CI/CDでのDockerビルド設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill dockerfile-optimiseインストール後、Claude Code で/dockerfile-optimiseを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonassets/templates/_template.mdreferences/_sections.mdbase-arg-version.mdbase-distroless.mdbase-minimal-image.mdbase-official-images.mdbase-pin-versions.mdbase-rebuild-regularly.mdcache-apt-combine.mdcache-copy-deps-first.mdcache-copy-link.mdcache-external.mdcache-invalidation.mdcache-layer-order.mdcache-minimize-layers.mdcache-mount-package.mdctx-bind-mounts.mdctx-dockerignore.mdctx-minimize-context.mdctx-syntax-directive.mddep-cache-mount-apt.mddep-cache-mount-npm.mddep-cache-mount-pip.mddep-cleanup-caches.mddep-version-pin.mdinst-copy-over-add.mdinst-entrypoint-exec.mdinst-healthcheck.mdinst-heredoc-scripts.md詳細
Dockerfile 最適化のベストプラクティス
Docker の公式ドキュメントのみを情報源とする、包括的な Dockerfile 最適化ガイドです。8 つのカテゴリにわたる 48 のルールを含み、自動リファクタリングとコード生成の指針となるよう、影響度の高い順に優先順位を付けています。
適用するタイミング
次のような場合に、これらのガイドラインを参照してください。
- 新しい Dockerfile を作成するとき、または既存のものを変更するとき
- Docker のビルド時間を最適化するとき(レイヤーキャッシュ、キャッシュマウント、コンテキスト管理)
- Docker イメージのサイズを削減するとき(マルチステージビルド、最小限のベースイメージ)
- コンテナのセキュリティを強化するとき(シークレットマウント、非 root ユーザー、アテステーション)
- Docker ビルドを含む CI/CD パイプラインを設定するとき
- Dockerfile のアンチパターンをレビューするとき
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | レイヤーキャッシュと順序 | CRITICAL | cache- |
| 2 | マルチステージビルド | CRITICAL | stage- |
| 3 | ベースイメージの選択 | HIGH | base- |
| 4 | ビルドコンテキストの管理 | HIGH | ctx- |
| 5 | セキュリティとシークレット | HIGH | sec- |
| 6 | 依存関係の管理 | MEDIUM-HIGH | dep- |
| 7 | 命令パターン | MEDIUM | inst- |
| 8 | 品質と検証 | MEDIUM | lint- |
クイックリファレンス
1. レイヤーキャッシュと順序(CRITICAL)
cache-layer-order- 変更頻度に応じてレイヤーを並べるcache-copy-deps-first- ソースコードより先に依存関係ファイルをコピーするcache-copy-link- キャッシュ効率の高いレイヤーコピーに COPY --link を使用するcache-mount-package- パッケージマネージャーにキャッシュマウントを使用するcache-apt-combine- apt-get update と install をまとめるcache-external- CI/CD ビルドに外部キャッシュを使用するcache-invalidation- 不要なキャッシュ無効化を避けるcache-minimize-layers- 関連する RUN 命令をまとめる
2. マルチステージビルド(CRITICAL)
stage-separate-build-runtime- ビルドステージと実行ステージを分けるstage-named-stages- 名前付きビルドステージを使用するstage-parallel-branches- ステージの並列実行を活用するstage-target-builds- 開発環境/本番環境向けにターゲットビルドを使用するstage-copy-artifacts-only- ステージ間では最終成果物のみをコピーするstage-reusable-base- 再利用可能なベースステージを作成する
3. ベースイメージの選択(HIGH)
base-minimal-image- 最小限のベースイメージを使用するbase-official-images- Docker Official Images を使用するbase-pin-versions- ダイジェストを使ってベースイメージのバージョンを固定するbase-arg-version- ベースイメージをパラメーター化するため、FROM より前に ARG を使用するbase-rebuild-regularly- --pull を使ってイメージを定期的に再ビルドするbase-distroless- 本番環境では distroless イメージまたは scratch イメージを使用する
4. ビルドコンテキストの管理(HIGH)
ctx-dockerignore- 不要なファイルを除外するために .dockerignore を使用するctx-bind-mounts- ビルド時のみ必要なファイルには COPY の代わりにバインドマウントを使用するctx-minimize-context- ビルドコンテキストを小さく保つctx-syntax-directive- 最新の BuildKit 機能を利用するために構文ディレクティブを使用する(キャッシュマウント、シークレットマウント、heredoc、COPY --link の前提条件)
5. セキュリティとシークレット(高)
sec-secret-mounts- 機密データにはシークレットマウントを使用するsec-non-root-user- root 以外のユーザーとして実行するsec-no-secrets-in-args- ARG や ENV でシークレットを渡さないsec-ssh-mounts- プライベートリポジトリへのアクセスには SSH マウントを使用するsec-attestations- SBOM と来歴証明のアテステーションを有効にするsec-no-unnecessary-packages- 不要なパッケージのインストールを避けるsec-ephemeral-containers- エフェメラルでステートレスなコンテナを設計する
6. 依存関係の管理(中〜高)
dep-cache-mount-apt- apt パッケージマネージャーにキャッシュマウントを使用するdep-cache-mount-npm- npm、yarn、pnpm にキャッシュマウントを使用するdep-cache-mount-pip- pip にキャッシュマウントを使用するdep-version-pin- 再現性を確保するためにパッケージのバージョンを固定するdep-cleanup-caches- 同じレイヤー内でパッケージマネージャーのキャッシュを削除する
7. 命令のパターン(中)
inst-json-cmd- CMD と ENTRYPOINT には JSON 形式を使用するinst-healthcheck- コンテナオーケストレーション用に HEALTHCHECK を定義するinst-heredoc-scripts- 複数行のスクリプトには heredoc を使用するinst-entrypoint-exec- entrypoint スクリプトでは exec を使用するinst-workdir-absolute- WORKDIR では絶対パスを使用するinst-copy-over-add- ADD より COPY を優先する
8. 品質と検証(中)
lint-build-checks- Docker のビルドチェックを有効にするlint-pipefail- パイプを使う RUN コマンドでは pipefail を使用するlint-labels- イメージのメタデータには標準ラベルを使用するlint-sort-arguments- 複数行の引数をアルファベット順に並べるlint-single-concern- 1 つのコンテナにつき 1 つの関心事にする
使用方法
詳しい説明とコード例については、個別のリファレンスファイルを参照してください。
- セクションの定義 - カテゴリーの構成と影響レベル
- ルールのテンプレート - 新しいルールを追加するためのテンプレート
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応