- Claude CodeでDockerfileとCompose設定を自動生成し開発時間を大幅短縮
- マルチステージビルド・セキュリティ最適化まで一貫してAIがサポート
- SES現場で即使えるコンテナ化ワークフローを実例付きで紹介
「Dockerを使いたいけど、Dockerfile の書き方がよくわからない」「Docker Composeの設定が複雑で手が止まる」「本番環境向けのコンテナ最適化をどうすればいいか…」
そんなSESエンジニアの悩みを解決するのが、Claude Code × Dockerの組み合わせです。
結論から言うと、Claude Codeを使えばDockerfile の自動生成からDocker Compose構築、マルチステージビルドの最適化、セキュリティ対策まで、コンテナ化に関するほぼすべての作業を効率化できます。手動で1時間かかっていた環境構築が、Claude Codeなら10分で完了します。
この記事はClaude Code完全攻略シリーズのEp.32として、Docker開発に特化した活用法を詳しく解説します。
- Claude CodeでDockerfileを自動生成する方法
- Docker Compose環境の構築テクニック
- マルチステージビルドの最適化
- コンテナセキュリティの自動チェック
- SES現場での実践的なコンテナ化ワークフロー
なぜClaude Code × Dockerなのか

Docker は現代の開発現場で不可欠な技術ですが、設定ファイルの記述には多くの知識が必要です。ベースイメージの選定、レイヤーキャッシュの最適化、セキュリティ設定、ネットワーク構成——考慮すべき点が多く、経験が浅いエンジニアにとってはハードルが高い領域です。
Claude Codeは、プロジェクトのコードベースを分析し、最適なDocker設定を自動生成します。単にテンプレートを出力するのではなく、実際のコードの依存関係やビルドプロセスを理解した上で、プロダクションレディな設定を提案してくれます。
Claude Code × Dockerの3つの強み
| 強み | 詳細 |
|---|---|
| コンテキスト理解 | package.json, requirements.txtなどから依存関係を自動解析 |
| ベストプラクティス適用 | マルチステージビルド・非rootユーザー・ヘルスチェックを標準で含む |
| 反復的改善 | 「もっと軽量に」「セキュリティ強化して」と対話的に最適化可能 |
Dockerfileの自動生成
基本的なNode.jsアプリのコンテナ化
プロジェクトルートで以下のプロンプトを実行します:
# Claude Codeに最適なDockerfileを生成させる
claude "このNode.jsプロジェクトのDockerfileを作成して。
マルチステージビルドで、本番用に最適化して。
package.jsonの依存関係を分析して適切なベースイメージを選んで"
Claude Codeが生成する典型的な出力:
# ============================================
# Stage 1: 依存関係のインストール
# ============================================
FROM node:20-alpine AS deps
WORKDIR /app
# パッケージマネージャのロックファイルをコピー
COPY package.json package-lock.json ./
# プロダクション依存のみインストール
RUN npm ci --only=production && \
npm cache clean --force
# ============================================
# Stage 2: ビルド
# ============================================
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# ソースコードをコピーしてビルド
COPY . .
RUN npm run build
# ============================================
# Stage 3: 本番イメージ
# ============================================
FROM node:20-alpine AS runner
# セキュリティ: 非rootユーザーで実行
RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 appuser
WORKDIR /app
# 依存関係とビルド成果物のみコピー
COPY --from=deps /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package.json ./
# ヘルスチェック
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
# 非rootユーザーに切り替え
USER appuser
EXPOSE 3000
CMD ["node", "dist/index.js"]
Pythonアプリのコンテナ化
claude "このPython FastAPIプロジェクトをコンテナ化して。
requirements.txtの依存関係を見て、最小限のイメージにして。
gunicornでの本番実行も含めて"
# マルチステージビルド: Python FastAPI
FROM python:3.12-slim AS builder
WORKDIR /app
# システム依存パッケージのインストール
RUN apt-get update && \
apt-get install -y --no-install-recommends gcc && \
rm -rf /var/lib/apt/lists/*
# 仮想環境を作成して依存関係をインストール
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 本番イメージ
FROM python:3.12-slim AS runner
# 非rootユーザー作成
RUN groupadd -r appgroup && useradd -r -g appgroup appuser
WORKDIR /app
# 仮想環境をコピー
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
COPY . .
# ヘルスチェック
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" || exit 1
USER appuser
EXPOSE 8000
CMD ["gunicorn", "app.main:app", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:8000"]
Docker Compose環境の構築
マイクロサービス構成の自動生成
claude "以下のサービス構成でdocker-compose.ymlを作成して:
- Next.jsフロントエンド(ポート3000)
- FastAPI バックエンド(ポート8000)
- PostgreSQL データベース
- Redis キャッシュ
- Nginx リバースプロキシ
開発環境と本番環境で分けて"
Claude Codeが生成する構成:
# docker-compose.yml(開発環境)
version: '3.8'
services:
# フロントエンド
frontend:
build:
context: ./frontend
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
volumes:
- ./frontend:/app
- /app/node_modules
environment:
- NEXT_PUBLIC_API_URL=http://localhost:8000
depends_on:
- backend
networks:
- app-network
# バックエンド
backend:
build:
context: ./backend
dockerfile: Dockerfile.dev
ports:
- "8000:8000"
volumes:
- ./backend:/app
environment:
- DATABASE_URL=postgresql://user:password@db:5432/appdb
- REDIS_URL=redis://redis:6379/0
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
networks:
- app-network
# データベース
db:
image: postgres:16-alpine
ports:
- "5432:5432"
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: appdb
volumes:
- postgres-data:/var/lib/postgresql/data
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d appdb"]
interval: 10s
timeout: 5s
retries: 5
networks:
- app-network
# キャッシュ
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- app-network
# リバースプロキシ
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- frontend
- backend
networks:
- app-network
volumes:
postgres-data:
redis-data:
networks:
app-network:
driver: bridge
本番用のオーバーライド設定
claude "docker-compose.ymlの本番用オーバーライドファイルを作って。
リソース制限、ログ設定、再起動ポリシーを含めて"
# docker-compose.prod.yml
version: '3.8'
services:
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
args:
- NODE_ENV=production
volumes: [] # 開発用のボリュームマウントを無効化
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
backend:
build:
context: ./backend
dockerfile: Dockerfile
volumes: []
deploy:
resources:
limits:
cpus: '1.0'
memory: 1G
replicas: 2
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
db:
deploy:
resources:
limits:
cpus: '1.0'
memory: 2G
restart: unless-stopped
redis:
deploy:
resources:
limits:
cpus: '0.25'
memory: 256M
restart: unless-stopped
command: redis-server --maxmemory 200mb --maxmemory-policy allkeys-lru
マルチステージビルドの最適化
イメージサイズの削減
Claude Codeに最適化を依頼する具体的な手順:
# 現在のイメージサイズを確認
docker images myapp
# Claude Codeにサイズ最適化を依頼
claude "このDockerfileのイメージサイズを最小化して。
現在800MBあるので、できれば100MB以下にしたい。
distrolessベースイメージの採用も検討して"
最適化前(800MB)→ 最適化後(45MB)の例:
# distrolessベースイメージで超軽量化
FROM golang:1.22 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -ldflags="-s -w" -o /app/server ./cmd/server
# 最小イメージ(シェルすら含まない)
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=builder /app/server /server
COPY --from=builder /app/configs /configs
EXPOSE 8080
ENTRYPOINT ["/server"]
ビルドキャッシュの最適化
claude "このDockerfileのビルドキャッシュを最適化して。
依存関係の変更時だけ再インストールされるようにして"
# レイヤーキャッシュを最大限活用する構成
FROM node:20-alpine AS builder
WORKDIR /app
# Step 1: パッケージ定義のみコピー(変更頻度: 低)
COPY package.json package-lock.json ./
# Step 2: 依存関係インストール(キャッシュが効く)
RUN --mount=type=cache,target=/root/.npm \
npm ci
# Step 3: 設定ファイルをコピー(変更頻度: 中)
COPY tsconfig.json next.config.js ./
# Step 4: ソースコードをコピー(変更頻度: 高)
COPY src/ ./src/
COPY public/ ./public/
# Step 5: ビルド
RUN npm run build
コンテナセキュリティの自動チェック
脆弱性スキャンの統合
claude "このDockerfileにセキュリティのベストプラクティスを適用して。
脆弱性スキャンも含めたCI/CDパイプラインも提案して"
Claude Codeが提案するセキュリティチェックリスト:
# .github/workflows/docker-security.yml
name: Docker Security Scan
on:
push:
paths:
- 'Dockerfile*'
- 'docker-compose*.yml'
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build image
run: docker build -t myapp:scan .
- name: Trivy vulnerability scan
uses: aquasecurity/trivy-action@master
with:
image-ref: 'myapp:scan'
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
- name: Hadolint(Dockerfile linting)
uses: hadolint/[email protected]
with:
dockerfile: Dockerfile
- name: Dockle(ベストプラクティスチェック)
uses: erzz/dockle-action@v1
with:
image: 'myapp:scan'
failure-threshold: 'WARN'
セキュリティ対策の自動適用
Claude Codeにセキュリティ強化を依頼すると、以下のような改善を自動で行います:
# セキュリティ強化済みDockerfile
FROM node:20-alpine AS runner
# 1. 不要なパッケージを削除
RUN apk --no-cache add dumb-init && \
rm -rf /var/cache/apk/*
# 2. 非rootユーザーで実行
RUN addgroup -g 1001 -S appgroup && \
adduser -S appuser -u 1001 -G appgroup
# 3. ファイルの所有権を明示
COPY --chown=appuser:appgroup --from=builder /app/dist ./dist
COPY --chown=appuser:appgroup --from=deps /app/node_modules ./node_modules
# 4. 読み取り専用ファイルシステム対応
RUN mkdir -p /tmp/app && chown appuser:appgroup /tmp/app
ENV TMPDIR=/tmp/app
# 5. シグナルハンドリング(graceful shutdown)
ENTRYPOINT ["dumb-init", "--"]
USER appuser
CMD ["node", "dist/index.js"]
SES現場での実践ワークフロー
案件参画初日のDocker環境構築
SES案件に参画した初日、開発環境のセットアップにDockerを使う典型的なシナリオ:
# Step 1: リポジトリをクローン
git clone https://github.com/company/project.git
cd project
# Step 2: Claude Codeで環境を理解
claude "このプロジェクトの構成を分析して、
Docker環境を構築して。READMEに書かれていない
暗黙の依存関係も検出して含めて"
# Step 3: Claude Codeが生成したdocker-compose.ymlで起動
docker compose up -d
# Step 4: 動作確認
claude "docker compose logsを確認して、
エラーがあれば修正して"
既存プロジェクトのコンテナ移行
レガシープロジェクトをDockerに移行する場合:
claude "このプロジェクトをDockerに移行したい。
現在の構成:
- Java 17 Spring Bootアプリ
- MySQL 8.0
- Redis
- 環境変数がハードコードされている
以下を実施して:
1. Dockerfileを作成(Gradleビルド対応)
2. docker-compose.ymlを作成
3. 環境変数を.env.exampleに抽出
4. READMEにDocker起動手順を追記"
よく使うClaude Codeプロンプト集
| シチュエーション | プロンプト例 |
|---|---|
| イメージが大きい | 「このDockerfileのイメージサイズを半分以下にして」 |
| ビルドが遅い | 「ビルドキャッシュを最適化してビルド時間を短縮して」 |
| 本番デプロイ | 「Kubernetes用のマニフェストも一緒に生成して」 |
| デバッグ | 「コンテナが起動しない原因を調査して。docker logsの出力はこれ:…」 |
| セキュリティ | 「このDockerfileのセキュリティを監査して改善して」 |
トラブルシューティング
よくあるDockerエラーとClaude Codeでの解決
エラー1: ポートの競合
# エラー: Bind for 0.0.0.0:3000 failed: port is already allocated
claude "ポート3000が使用中でDockerが起動しない。
使用中のプロセスを特定して、docker-compose.ymlの
ポートマッピングを変更して"
エラー2: メモリ不足
# Node.jsアプリのOOM
claude "Dockerコンテナ内のNode.jsアプリがOOM Killerで停止する。
メモリ制限の設定とNode.jsのヒープサイズ調整をして"
エラー3: ボリュームの権限問題
# Permission denied
claude "Dockerボリュームマウントで権限エラーが出る。
ホストとコンテナのUID/GIDを合わせる設定にして"
Docker開発におけるClaude Codeの料金目安
| 作業内容 | 所要時間 | Claude Code使用量 | 手動との比較 |
|---|---|---|---|
| Dockerfile生成 | 2分 | 約$0.05 | 30分→2分 |
| Compose構築 | 5分 | 約$0.10 | 1時間→5分 |
| セキュリティ監査 | 3分 | 約$0.08 | 2時間→3分 |
| トラブルシューティング | 5分 | 約$0.10 | 1時間→5分 |
SES案件での市場価値
Docker/コンテナ技術のスキルはSES市場で非常に高い需要があります:
- Docker基本操作 → 多くの案件で必須スキル
- Docker Compose構築 → 月額5〜10万円のスキルアップ要素
- Kubernetes連携 → 月額70〜100万円の高単価案件で必須
- コンテナセキュリティ → セキュリティ案件で差別化ポイント
まとめ
Claude Code × Dockerの組み合わせは、コンテナ化のあらゆるフェーズを効率化します。
- Claude CodeでDockerfileを自動生成し、開発環境構築を大幅時短
- マルチステージビルド・キャッシュ最適化で本番品質のイメージを作成
- セキュリティのベストプラクティスを自動適用
- Docker Compose構成も対話的に構築・改善
- SES現場でのコンテナスキルは高単価案件への直結スキル
Claude Code完全攻略シリーズの他の記事も合わせてご覧ください: