jpskill.com
🛠️ 開発・MCP コミュニティ

containerization-best-practices

Dockerやコンテナのセキュリティ、パフォーマンス向上、イメージ最適化など、コンテナ化戦略全般を最適化するSkill。

📜 元の英語説明(参考)

Container and Docker best practices. Use when user asks to "optimize Docker", "Docker best practices", "container security", "image optimization", "layer caching", "multi-stage builds", "container networking", "volume management", "Docker performance", or mentions containerization strategies and Docker optimization.

🇯🇵 日本人クリエイター向け解説

一言でいうと

Dockerやコンテナのセキュリティ、パフォーマンス向上、イメージ最適化など、コンテナ化戦略全般を最適化するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-17
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

コンテナ化と Docker のベストプラクティス

効率的で安全、かつ保守しやすいコンテナを構築するための、高度な Docker とコンテナ化戦略です。

Dockerfile のベストプラクティス

マルチステージビルド

# ビルドステージ
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# ランタイムステージ
FROM node:18-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]

レイヤーキャッシュの最適化

# 悪い例 - コード変更のたびに再ビルドされる
FROM node:18
COPY . .
RUN npm install

# 良い例 - レイヤーキャッシュを活用する
FROM node:18
COPY package*.json ./
RUN npm install
COPY . .

最小限のベースイメージ

# 大きい例 ~330MB
FROM ubuntu:22.04

# より良い例 ~100MB
FROM node:18

# 最良の例 ~50MB (Alpine)
FROM node:18-alpine

イメージサイズの最適化

  • alpine バリアント (-alpine, -slim) を使用します。
  • ビルド依存関係を除外するためにマルチステージビルドを使用します。
  • .dockerignore ファイルでファイルを除外します。
  • パッケージマネージャーのキャッシュを削除します。
  • 特定のバージョン (latest ではない) を使用します。

.dockerignore の例

node_modules
npm-debug.log
.git
.gitignore
README.md
.env
.DS_Store
coverage
tests

セキュリティのベストプラクティス

非 root ユーザーとして実行

RUN useradd -m -u 1000 appuser
USER appuser

イメージにシークレットを含めない

# 悪い例 - イメージにシークレットが含まれている
RUN npm install --password=$DB_PASSWORD

# 良い例 - ビルド引数または実行時の環境変数を使用する
ARG NPM_TOKEN
RUN npm install --no-optional

イメージをスキャンする

docker scan myapp:latest
trivy image myapp:latest

ネットワークセキュリティ

  • 特定のベースイメージ (ubuntu ではない) を使用します。
  • イメージを常に最新の状態に保ちます。
  • 不要なツールを削除します。
  • 可能な場合は読み取り専用ファイルシステムを使用します。

コンテナネットワーキング

ブリッジネットワーク

docker network create myapp-net
docker run --network myapp-net myapp

環境変数

ENV NODE_ENV=production
ENV LOG_LEVEL=info

ボリューム管理

名前付きボリューム

docker volume create appdata
docker run -v appdata:/data myapp

バインドマウント

docker run -v /host/path:/container/path myapp

パフォーマンスの最適化

  1. ベースイメージ: 最小限のベースイメージを使用します。
  2. レイヤーキャッシュ: コマンドを更新頻度順に並べます。
  3. 圧縮: より良いキャッシュのために BuildKit を使用します。
  4. 並行ビルド: レイヤーを並行してビルドします。

BuildKit の有効化

export DOCKER_BUILDKIT=1
docker build -t myapp .

Docker Compose のベストプラクティス

version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - NODE_ENV=production
    volumes:
      - appdata:/data
    networks:
      - appnet
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000"]
      interval: 30s
      timeout: 10s

  postgres:
    image: postgres:15-alpine
    environment:
      - POSTGRES_PASSWORD=secret
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  appdata:
  pgdata:

networks:
  appnet:

イメージレジストリのベストプラクティス

  • イメージに意味のあるタグを付けます (バージョン、git-sha、latest)。
  • プロプライエタリなコードにはプライベートレジストリを使用します。
  • 古いイメージを定期的にクリーンアップします。
  • イメージの署名と検証を実装します。

意味のあるタグ付け

docker tag myapp:latest myapp:1.0.0
docker tag myapp:latest myapp:2024-02-07
docker tag myapp:latest myapp:${GIT_SHA}

コンテナのデバッグ

# 実行中のコンテナでコマンドを実行する
docker exec -it container-id bash

# ログを表示する
docker logs container-id
docker logs -f container-id

# リソース使用量を検査する
docker stats

# イメージレイヤーをデバッグする
docker history myapp:latest

参考文献

  • Docker Documentation
  • Google Container Best Practices
  • Kubernetes Documentation
  • 12-Factor App Methodology
  • Container Image Spec (OCI)
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Containerization & Docker Best Practices

Advanced Docker and containerization strategies for building efficient, secure, and maintainable containers.

Dockerfile Best Practices

Multi-Stage Build

# Build stage
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Runtime stage
FROM node:18-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]

Layer Caching Optimization

# Bad - rebuilds on every code change
FROM node:18
COPY . .
RUN npm install

# Good - leverages layer caching
FROM node:18
COPY package*.json ./
RUN npm install
COPY . .

Minimal Base Images

# Large ~330MB
FROM ubuntu:22.04

# Better ~100MB
FROM node:18

# Best ~50MB (Alpine)
FROM node:18-alpine

Image Size Optimization

  • Use alpine variants (-alpine, -slim)
  • Multi-stage builds to exclude build dependencies
  • .dockerignore file to exclude files
  • Remove package manager caches
  • Use specific versions (not latest)

Example .dockerignore

node_modules
npm-debug.log
.git
.gitignore
README.md
.env
.DS_Store
coverage
tests

Security Best Practices

Run as Non-Root

RUN useradd -m -u 1000 appuser
USER appuser

No Secrets in Images

# Bad - secrets in image
RUN npm install --password=$DB_PASSWORD

# Good - use build args or env at runtime
ARG NPM_TOKEN
RUN npm install --no-optional

Scan Images

docker scan myapp:latest
trivy image myapp:latest

Network Security

  • Use specific base images (not ubuntu)
  • Keep images updated
  • Remove unnecessary tools
  • Use read-only filesystems where possible

Container Networking

Bridge Networks

docker network create myapp-net
docker run --network myapp-net myapp

Environment Variables

ENV NODE_ENV=production
ENV LOG_LEVEL=info

Volume Management

Named Volumes

docker volume create appdata
docker run -v appdata:/data myapp

Bind Mounts

docker run -v /host/path:/container/path myapp

Performance Optimization

  1. Base Image: Use minimal base images
  2. Layer Caching: Order commands by change frequency
  3. Compression: Use BuildKit for better caching
  4. Concurrent Builds: Parallel layer building

Enable BuildKit

export DOCKER_BUILDKIT=1
docker build -t myapp .

Docker Compose Best Practices

version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - NODE_ENV=production
    volumes:
      - appdata:/data
    networks:
      - appnet
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000"]
      interval: 30s
      timeout: 10s

  postgres:
    image: postgres:15-alpine
    environment:
      - POSTGRES_PASSWORD=secret
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  appdata:
  pgdata:

networks:
  appnet:

Image Registry Best Practices

  • Tag images semantically (version, git-sha, latest)
  • Use private registries for proprietary code
  • Regular cleanup of old images
  • Implement image signing and verification

Semantic Tagging

docker tag myapp:latest myapp:1.0.0
docker tag myapp:latest myapp:2024-02-07
docker tag myapp:latest myapp:${GIT_SHA}

Debugging Containers

# Execute command in running container
docker exec -it container-id bash

# View logs
docker logs container-id
docker logs -f container-id

# Inspect resource usage
docker stats

# Debug image layers
docker history myapp:latest

References

  • Docker Documentation
  • Google Container Best Practices
  • Kubernetes Documentation
  • 12-Factor App Methodology
  • Container Image Spec (OCI)