docker-optimization について
Docker イメージとコンテナのサイズ、ビルド速度、実行性能を最適化する開発者向けスキルです。ベースイメージ、キャッシュ、マルチステージビルド、リソース制限の手法やチェックリスト、分析コマンドを扱います。
主な機能
- 01ベースイメージの選定
- 02レイヤーとキャッシュの最適化
- 03マルチステージビルドの指針
- 04実行時のリソース制限
- 05イメージとレイヤーの分析コマンド
活用シーン
- 01コンテナイメージのサイズ削減
- 02Docker のビルド時間短縮
- 03コンテナの CPU・メモリ制限の設定
- 04イメージレイヤーとキャッシュの問題調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-docker --skill docker-optimizationインストール後、Claude Code で/docker-optimizationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/config.yamloptimization-tips.yamlschema.jsonreferences/GUIDE.mdPATTERNS.mdscripts/validate.py詳細
Docker の最適化スキル
サイズの削減、ビルドキャッシュ、実行時のパフォーマンスを網羅した、Docker イメージとコンテナの包括的な最適化手法です。
目的
2024~2025 年の業界標準のベストプラクティスを使用して、イメージサイズを削減し、ビルド時間を短縮して、コンテナのパフォーマンスを最適化します。
パラメーター
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| target | enum | いいえ | all | size/build/runtime/all |
| base_image | string | いいえ | - | 現在のベースイメージ |
| current_size | string | いいえ | - | 現在のイメージサイズ |
最適化戦略
1. イメージサイズの削減
ベースイメージの選択
| ベース | サイズ | 用途 |
|---|---|---|
| scratch | 0 | 静的な Go/Rust バイナリ |
| distroless | 2-20MB | 本番環境のコンテナ |
| alpine | 5MB | 汎用 |
| slim | 80-150MB | apt パッケージが必要な場合 |
| full | 500MB+ | 開発専用 |
# Before: 1.2GB
FROM node:20
# After: 150MB (88% smaller)
FROM node:20-alpine
レイヤーの最適化
# Bad: 3 layers, 150MB
RUN apt-get update
RUN apt-get install -y curl
RUN rm -rf /var/lib/apt/lists/*
# Good: 1 layer, 50MB
RUN apt-get update && \
apt-get install -y --no-install-recommends curl && \
rm -rf /var/lib/apt/lists/*
不要なファイルの削除
# Clean package manager cache
RUN npm cache clean --force
RUN pip cache purge
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Use .dockerignore
# node_modules, .git, *.md, tests/, docs/
2. ビルド速度の最適化
レイヤーキャッシュ戦略
# Dependencies first (rarely change)
COPY package*.json ./
RUN npm ci
# Source code last (frequently changes)
COPY . .
RUN npm run build
BuildKit キャッシュマウント
# syntax=docker/dockerfile:1
FROM node:20-alpine
# Cache npm packages
RUN --mount=type=cache,target=/root/.npm \
npm ci
# Cache pip packages
RUN --mount=type=cache,target=/root/.cache/pip \
pip install -r requirements.txt
並列マルチステージ
# Parallel stages (BuildKit)
FROM node:20-alpine AS deps
COPY package*.json ./
RUN npm ci
FROM deps AS builder
COPY . .
RUN npm run build
FROM deps AS linter
COPY . .
RUN npm run lint
3. 実行時のパフォーマンス
リソース制限
services:
app:
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
コンテナのチューニング
# Set memory limits
docker run --memory=512m --memory-swap=512m app
# CPU limits
docker run --cpus=1.5 app
# I/O limits
docker run --device-read-bps=/dev/sda:1mb app
最適化チェックリスト
サイズのチェックリスト
- 実用上、最小のベースイメージを使用していますか?
- マルチステージビルドを実装していますか?
- パッケージマネージャーのキャッシュをクリーンアップしていますか?
- 開発用依存関係を除外していますか?
- .dockerignore を設定していますか?
ビルド速度のチェックリスト
- コードより先に依存関係をコピーしていますか?
- BuildKit を有効にしていますか?
- キャッシュマウントを使用していますか?
- 可能な場合はステージを並列化していますか?
実行時のチェックリスト
- リソース制限を設定していますか?
- ヘルスチェックを設定していますか?
- 非 root ユーザーを使用していますか?
- 可能な場合は読み取り専用ファイルシステムを使用していますか?
分析ツール
# Image size analysis
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
# Layer analysis
docker history <image> --format "{{.Size}}\t{{.CreatedBy}}"
# Deep dive analysis
dive <image>
# Build time analysis
DOCKER_BUILDKIT=1 docker build --progress=plain .
エラー処理
よくある問題
| 問題 | 原因 | 解決策 |
|---|---|---|
| イメージが大きい | マルチステージではない | マルチステージを実装する |
| ビルドが遅い | レイヤーの順序が不適切 | コードより先に依存関係を配置する |
| キャッシュが機能しない | コンテキストの変更 | .dockerignore を使用する |
| 実行時に OOM が発生する | 制限がない | メモリ制限を設定する |
トラブルシューティング
デバッグチェックリスト
- BuildKit が有効ですか?(
DOCKER_BUILDKIT=1) - キャッシュが使用されていますか?(ビルド出力を確認)
- .dockerignore は機能していますか?(コンテキストサイズを確認)
- レイヤーは最適化されていますか?(
diveを実行)
使用方法
Skill("docker-optimization")
関連スキル
- docker-multi-stage
- dockerfile-basics
- docker-production
コメント
Markdown 対応