mcpField
D
docker-run

docker-run

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

docker-run について

docker-run は、コンテナのライフサイクルを扱う開発者や運用担当者向けの、Docker コンテナ実行・管理ガイドスキルです。リソース制限、ヘルスチェック、再起動ポリシー、ログ、対話的なデバッグを扱い、実行スクリプトではなく手順を提供します。

主な機能

  1. 01一般的なオプションでコンテナを実行
  2. 02メモリとCPUの上限を設定
  3. 03ヘルスチェックと再起動ポリシーを設定
  4. 04ログとコンテナのヘルス状態を確認
  5. 05docker exec とシグナルでデバッグ

活用シーン

  1. 01ポートとボリュームを割り当ててサービスを起動
  2. 02ワークロードのコンテナリソースを制限
  3. 03ヘルス状態とログからコンテナを診断
  4. 04サービスの再起動動作を設定

インストール

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

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

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

同梱ファイル

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

agents/
openai.yaml
examples/
01-basic-run.md
01-healthcheck.md
02-resource-limits.md
references/
01-restart-policies.md
01-run-reference.md
02-logging-drivers.md
03-healthcheck-patterns.md

詳細

Docker Run — コンテナーのライフサイクル管理

Docker コンテナーの実行、監視、管理に関する完全なガイドです。

使用する場面

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

  • 「docker run」、「コンテナーを実行する」、「コンテナーを起動する」
  • 「docker ps」、「docker stop」、「docker restart」
  • 「コンテナーのリソース制限」、「メモリー制限」、「CPU 制限」
  • 「ヘルスチェック」、「healthcheck」
  • 「docker logs」、「ログを確認する」
  • 「docker exec」、「コンテナーに入る」
  • 「restart policy」、「コンテナーの再起動ポリシー」

コンテナーのライフサイクル

docker pull → docker create → docker start → docker run (create+start)
                                                │
                          ┌─────────────────────┼─────────────────────┐
                          ▼                     ▼                     ▼
                      Running              Paused/Stopped         Killed
                          │                     │
                          ▼                     ▼
                      docker stop          docker start
                      docker kill          docker restart
                      docker rm            docker rm -f

docker run — 完全リファレンス

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

# Most common form
docker run -d --name myapp \
  -p 8080:8080 \
  -v /host/path:/container/path \
  -e ENV_VAR=value \
  --restart unless-stopped \
  myimage:tag
フラグ目的例
-dデタッチ(バックグラウンド実行)-d
--nameコンテナー名--name my-nginx
-pポートマッピング(ホスト:コンテナー)-p 8080:80
-vボリューム/バインドマウント-v data:/var/lib/mysql
-e環境変数-e DB_HOST=localhost
--env-fileファイルから環境変数を読み込む--env-file .env
--restart再起動ポリシー--restart unless-stopped
--rm停止時に自動削除--rm(一時コンテナー用)

リソース制限

# Memory: limit + reservation
docker run --memory=512m --memory-reservation=256m myapp

# CPU: shares (relative) + cpus (absolute)
docker run --cpus=2 --cpu-shares=1024 myapp

# Combined: production-grade limits
docker run -d \
  --memory=1g --memory-swap=1g \
  --cpus=2 \
  --pids-limit=100 \
  myapp
リソースフラグベストプラクティス
メモリー--memory=512m必ず設定してください。設定しないと、コンテナーがホストのメモリーを使い切る可能性があります
メモリー+スワップ--memory-swap=1gスワップを無効にするには、メモリーと同じ値に設定します
CPU--cpus=2ハードリミットです。相対的な優先度には --cpu-shares を使用します
PID--pids-limit=100フォークボムを防止します
Ulimit--ulimit nofile=65536ファイルディスクリプターの制限

ヘルスチェック

Dockerfile の HEALTHCHECK
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
  CMD curl -f http://localhost:8080/health || exit 1
ヘルスチェックの状態
starting → healthy (passes)
         → unhealthy (fails 3 consecutive checks)
# Check health status
docker inspect --format='{{.State.Health.Status}}' myapp

# Health check in compose
# services.app.healthcheck.test: ["CMD", "curl", "-f", "http://localhost:8080/health"]

再起動ポリシー

ポリシー動作使用場面
no再起動しない(デフォルト)単発タスク
on-failure[:N]ゼロ以外の終了コードで再起動し、最大 N 回まで実行バッチジョブ
always常に再起動重要なサービス(無限ループのリスクに注意)
unless-stopped明示的に停止されない限り再起動ほとんどのサービスに推奨
docker run --restart unless-stopped myapp
docker update --restart always myapp  # Change policy on running container

ログとデバッグ

# View logs
docker logs myapp                # All logs
docker logs -f myapp             # Follow (tail -f)
docker logs --tail 50 myapp      # Last 50 lines
docker logs --since 10m myapp    # Last 10 minutes

# Execute commands in container
docker exec -it myapp sh         # Interactive shell
docker exec myapp cat /etc/hosts # Run single command

# Inspect state
docker inspect myapp             # Full JSON metadata
docker stats myapp               # Live resource usage
docker top myapp                 # Running processes
docker port myapp                # Port mappings

シグナルの処理

docker stop myapp    → SIGTERM → wait 10s → SIGKILL
docker kill myapp    → SIGKILL immediately
docker kill -s HUP myapp → Send custom signal
シグナルdocker コマンドコンテナーへの影響
SIGTERMdocker stopグレースフルシャットダウン(デフォルト)
SIGKILLdocker kill強制終了(クリーンアップなし)
SIGHUPdocker kill -s HUP設定を再読み込み(アプリケーション固有)

ワークフロー — 推奨手順

ステップ 1: イメージをプルまたはビルドする:docker pull または docker build でイメージを準備します ステップ 2: コンテナーを実行する:docker run -d --name myapp -p 8080:8080 -v data:/data --memory 512m myapp ステップ 3: 起動を確認する:docker ps と docker logs myapp で正常に実行されていることを確認します ステップ 4: ヘルスチェックを設定する:Dockerfile で HEALTHCHECK を定義するか、実行時に指定します ステップ 5: 実行状況を監視する:docker stats と docker logs -f で継続的に確認します

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

  • --memory=0 はデフォルトで無制限です:コンテナーがホストのメモリーをすべて消費する可能性があります。→ 対処方法:docker run --memory=512m --cpus=1 app を実行し、docker stats で使用状況を確認します。
  • docker stop のタイムアウト:デフォルトの猶予期間は 10 秒です。→ 対処方法:docker stop -t 30 myapp を実行し、アプリケーションが SIGTERM を適切に処理することを確認します。
  • docker run は新しいコンテナーを作成します:docker run nginx を 2 回実行すると、2 つのコンテナーが作成されます。→ 対処方法:既存のコンテナーを再起動するには docker start <existing-name> を使用し、停止中のコンテナーを探すには docker ps -a を使用します。
  • ログがディスクをいっぱいにする:JSON ファイルドライバーでは、デフォルトでローテーションが設定されていません。→ 対処方法:docker run --log-opt max-size=10m --log-opt max-file=3 app を実行します。既存のコンテナーの場合は、/etc/docker/daemon.json を編集して dockerd を再起動します。
  • docker exec の終了コード:コマンドの終了コードが返されます。→ 対処方法:スクリプトで使用する場合は、docker exec myapp healthcheck.sh || exit 1 を実行します。

対応範囲 — 対応できること・できないこと

分類場面説明
✅ 対応可能docker run でのコンテナー実行すべてのパラメーター、リソース制限、再起動ポリシー
✅ 対応可能ヘルスチェックの設定HEALTHCHECK 命令と実行時の上書き
✅ 対応可能ログ管理ログドライバーの選択とローテーション設定
✅ 対応可能コンテナーに入ってデバッグdocker exec / docker attach
⚠️ 条件付き--privileged 特権モードデバッグ用途のみ。プロダクション環境では禁止
⚠️ 条件付き実行中のコンテナーの制限変更docker update が必要です。一部のパラメーターは動的に変更できません
❌ 対象外Dockerfile の作成docker-dockerfile を使用してください
❌ 対象外複数コンテナーのオーケストレーションdocker-compose を使用してください
❌ 対象外イメージのビルドdocker-build を使用してください

このスキルを使用しないケース

❌ 使用しない✅ 代わりに使用
Docker の基本/初回セットアップdocker-basics
Dockerfile の作成docker-build
マルチコンテナーアプリdocker-compose
ネットワーク設定docker-networking
ストレージ/ボリューム管理docker-storage

セキュリティと安定性

  • 本番環境では、ノイジーネイバーの問題を防ぐため、必ず --memory と --cpus の制限を設定してください。
  • --privileged フラグは避けてください。代わりに、必要な機能を指定して --cap-add を使用してください。
  • コンテナーを root として実行しないでください。--user フラグ、または Dockerfile の USER を使用してください。
  • ステートレスなコンテナーでは、可能な限り --read-only を使用してください。
  • 実行可能なスクリプトは含まれていません。ガイダンスのみを提供します。

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

ドキュメントURL
Docker エンジンhttps://docs.docker.com/engine/
docker run リファレンスhttps://docs.docker.com/reference/cli/docker/container/run/
コンテナー管理 CLIhttps://docs.docker.com/reference/cli/docker/container/
ランタイムオプションhttps://docs.docker.com/engine/reference/run/
リソース制限https://docs.docker.com/config/containers/resource_constraints/
ロギングドライバーhttps://docs.docker.com/config/containers/logging/

🧭 Docker スキルの道のり

📍 現在地:docker-run — ステップ 3:コンテナー管理と運用

← 前へ:docker-build — Dockerfile とイメージのビルド → 次へ:docker-networking / docker-storage / docker-compose

コメント