mcpField
D
docker-build

docker-build

github.com/full-stack-skillsクラウド・DevOps3105 回インストール4 週間前に更新
リポジトリ

docker-build について

Docker コマンドを使う開発者向けの、イメージ構築・管理スキルです。ビルド、タグ付け、検査、プッシュ、削除を扱い、対象範囲や注意点も示します。

主な機能

  1. 01ビルド引数を指定したイメージ構築
  2. 02複数タグの付与
  3. 03イメージ情報と履歴の確認
  4. 04レジストリへのイメージプッシュ
  5. 05未使用イメージの削除

活用シーン

  1. 01アプリケーションイメージの構築とタグ付け
  2. 02ローカルイメージの詳細や履歴の確認
  3. 03イメージのレジストリへのプッシュ
  4. 04不要なローカルイメージの削除

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/full-stack-skills/docker-skills --skill docker-build

インストール後、Claude Code で/docker-buildを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
examples/
01-build-tag-push.md
02-build-args.md
03-target-stage.md
references/
01-build-command-reference.md
02-tag-strategy.md
03-buildkit-basics.md

詳細

Docker Build — イメージの構築と管理

docker build とイメージのライフサイクル管理に関する完全なリファレンスです。構築、タグ付け、検査、プッシュ、削除を行います。

使用する場面

ユーザーが次の内容に言及した場合は、必ずこのスキルを使用してください。

  • 「docker build」、「イメージの構築方法」、「docker build コマンド」
  • 「docker tag」、「docker push」、「イメージのプッシュ」
  • 「docker images」、「イメージ管理」、「docker image」
  • 「--build-arg」、「ビルド引数」
  • 「docker history」、「docker inspect」、「イメージの確認」
  • 「docker image prune」、「docker system prune」、「イメージのクリーンアップ」
✅ 使用する場面❌ 代わりに使用
docker build の実行、タグ付け、プッシュ
ローカルイメージの管理
docker build CLI リファレンスが必要な場合
Dockerfile 自体の作成docker-dockerfile
マルチプラットフォームビルドdocker-buildx
BuildKit の高度な機能docker-buildx

docker build — 完全な構文

docker build [OPTIONS] PATH | URL | -
基本的なオプション
# Basic build
docker build -t myapp:v1 .

# Tag multiple tags at once
docker build -t myapp:v1.2.3 -t myapp:latest -t ghcr.io/org/myapp:v1.2.3 .

# Build from specific Dockerfile
docker build -f Dockerfile.prod -t myapp:prod .

# Build from Git repository
docker build -t myapp https://github.com/user/repo.git#main

# Build from stdin
cat Dockerfile | docker build -t myapp -
docker build -t myapp - <<EOF
FROM alpine:3.20
CMD ["echo", "hello"]
EOF
ビルド引数(--build-arg)
# Pass build arguments
docker build --build-arg NODE_VERSION=22 --build-arg ENV=production -t myapp .

# From file
docker build --build-arg $(cat .env.build | xargs) -t myapp .
ARG NODE_VERSION=20
FROM node:${NODE_VERSION}-alpine
ARG ENV=development
ENV NODE_ENV=${ENV}
RUN echo "Building for ${NODE_ENV}"
オプション目的
--build-arg KEY=VALUE単一の引数を渡す
--build-arg-file FILEファイルから引数を読み込む
ARG KEY=defaultデフォルト値付きで Dockerfile に定義する
ビルドの制御
# No cache (force full rebuild)
docker build --no-cache -t myapp .

# Pull base image even if cached locally
docker build --pull -t myapp .

# Quiet mode (only image ID)
docker build -q -t myapp .

# Set build target (multi-stage)
docker build --target builder -t myapp:builder .

# BuildKit output (export to local directory)
docker build --output type=local,dest=./out .

# Platform (with BuildKit)
docker build --platform linux/amd64 -t myapp .

# Add metadata
docker build --label "org.opencontainers.image.version=v1.2.3" -t myapp .
ビルドコンテキスト
# Current directory
docker build -t myapp .

# Specific directory
docker build -t myapp ./app

# Remote Git repo
docker build -t myapp https://github.com/user/repo.git#v1.0.0:subdir

# Pipe context via stdin (no context)
docker build -t myapp - < Dockerfile

イメージのタグ付け — docker tag

# Tag an existing image
docker tag myapp:v1 myapp:latest
docker tag myapp:v1 ghcr.io/org/myapp:v1

# Tag with registry
docker tag myapp:v1 registry.example.com:5000/myapp:v1

# Force overwrite existing tag
docker tag myapp:v1 myapp:latest   # replaces where :latest points
タグの命名規則
[registry[:port]/][namespace/]name[:tag|@digest]

ghcr.io/myorg/myapp:v1.2.3
│       │     │      │
│       │     │      └── tag (semver)
│       │     └── image name
│       └── namespace
└── registry

イメージの検査

# List images
docker images
docker image ls
docker image ls --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

# Inspect image details
docker inspect myapp:v1
docker inspect --format='{{.Config.Env}}' myapp:v1
docker inspect --format='{{.Created}}' myapp:v1

# View layer history
docker history myapp:v1
docker history --no-trunc --human myapp:v1

# Show digest
docker image ls --digests myapp
docker inspect --format='{{index .RepoDigests 0}}' myapp:v1

レジストリへのプッシュ

# Login
docker login
docker login ghcr.io -u USERNAME -p $TOKEN

# Push
docker push myapp:v1
docker push myapp --all-tags

# Push with digest
docker push myapp@sha256:abc123...

イメージのクリーンアップ

# Remove specific image
docker rmi myapp:v1
docker image rm myapp:v1

# Remove dangling images (<none>:<none>)
docker image prune

# Remove all unused images
docker image prune -a

# Full system cleanup
docker system prune -a --volumes

# Check disk usage
docker system df
docker system df -v

ワークフロー — 推奨するビルド手順

Step 1: Dockerfile の準備:作成済みであることを確認します(または docker-dockerfile を使用して生成します)。 Step 2: ビルド引数の設定:--build-arg、--label、--target を確認します。 Step 3: ビルドの実行:docker build -t myapp:v1 -t myapp:latest . Step 4: イメージの検証:docker images / docker history / docker inspect Step 5: リポジトリへのプッシュ:docker push の前に docker login を実行し、本番環境では digest で固定します。

注意点 — よくある落とし穴

  • docker build -t myapp . はコンテキスト全体を送信します:.dockerignore がないと、node_modules/.git などすべてが送信されます。.dockerignore を使ってコンテキストを最小限にしてください。
  • docker build --no-cache は時間がかかります:本当に必要な場合にのみ使用してください。通常のビルドではキャッシュされたレイヤーが再利用されます。
  • docker tag は変更可能です:タグは付け替えられます。本番環境ではタグの代わりに digest(@sha256:...)を使用してください。
  • ログインせずに docker push を実行すると、エラーが表示されないまま失敗します:必ず先に docker login を実行するか、CI の認証情報ヘルパーを使用してください。
  • docker system prune -a は破壊的な操作です:未使用のイメージ、コンテナー、ネットワークをすべて削除します。確認せずに本番環境で実行しないでください。
  • docker build --pull はベースイメージを変更します:ベースイメージが更新されていると、ビルド結果が異なる場合があります。

境界 — 対応範囲(適用する場面と適用しない場面)

分類場面説明
✅ 対応docker build によるイメージの構築完全なコマンド構文、コンテキスト管理、複数タグ
✅ 対応docker tag によるタグ付け命名規則、複数レジストリのタグ
✅ 対応docker push によるイメージのプッシュリポジトリへのログイン、digest による固定
✅ 対応イメージ管理(inspect/history/prune)ローカルイメージのライフサイクル
⚠️ 条件付きBuildKit の高度な機能(secret/cache/ssh)docker-buildx を使用
⚠️ 条件付きネットワークが不安定な場合の大容量イメージのプッシュmax-concurrent-uploads を設定
❌ 対象外Dockerfile の作成docker-dockerfile を使用
❌ 対象外マルチプラットフォームビルド(arm64/amd64)docker-buildx を使用
❌ 対象外CI/CD パイプラインへの統合docker-cicd を使用

このスキルを使用しない場面

❌ 使用しない✅ 代わりに使用
Dockerfile 自体の作成docker-dockerfile
マルチプラットフォーム/arm64 ビルドdocker-buildx
BuildKit の secrets/cache/SSHdocker-buildx
コンテナーの実行docker-run
Docker の基本docker-basics

セキュリティと安定性

  • 本番レジストリにプッシュする前に、必ず docker scout で構築したイメージをスキャンしてください。
  • ベースイメージにセキュリティパッチが適用された最新の状態にするため、docker build --pull を使用してください。
  • ビルド引数にシークレットを埋め込まないでください(--build-arg はイメージの履歴から見えてしまいます)。代わりに BuildKit の --secret を使用してください。
  • 監査証跡として、メタデータ(バージョン、git SHA、ビルドタイムスタンプ)を記録するために、イメージへ --label でタグ付けしてください。
  • ディスク容量を確保し、攻撃対象領域を減らすため、docker image prune で未使用のイメージを定期的に削除してください。

📚 公式ドキュメントの参考情報

ドキュメントアドレス
Docker Buildhttps://docs.docker.com/build/
docker build コマンドhttps://docs.docker.com/reference/cli/docker/build/
docker taghttps://docs.docker.com/reference/cli/docker/image/tag/
docker pushhttps://docs.docker.com/reference/cli/docker/image/push/
docker imagehttps://docs.docker.com/reference/cli/docker/image/
Dockerfile リファレンスhttps://docs.docker.com/reference/dockerfile/

🧭 Docker Skills Journey

📍 現在地:docker-build — イメージの構築と管理

basics → dockerfile → build → buildx → run → compose → ...

→ 次へ:docker-buildx — マルチプラットフォームビルドとBuildKitの高度な機能

コメント