docker-run について
docker-run は、コンテナのライフサイクルを扱う開発者や運用担当者向けの、Docker コンテナ実行・管理ガイドスキルです。リソース制限、ヘルスチェック、再起動ポリシー、ログ、対話的なデバッグを扱い、実行スクリプトではなく手順を提供します。
主な機能
- 01一般的なオプションでコンテナを実行
- 02メモリとCPUの上限を設定
- 03ヘルスチェックと再起動ポリシーを設定
- 04ログとコンテナのヘルス状態を確認
- 05docker exec とシグナルでデバッグ
活用シーン
- 01ポートとボリュームを割り当ててサービスを起動
- 02ワークロードのコンテナリソースを制限
- 03ヘルス状態とログからコンテナを診断
- 04サービスの再起動動作を設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ full-stack-skills/ docker-skills --skill docker-runインストール後、Claude Code で/docker-runを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlexamples/01-basic-run.md01-healthcheck.md02-resource-limits.mdreferences/01-restart-policies.md01-run-reference.md02-logging-drivers.md03-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 コマンド | コンテナーへの影響 |
|---|---|---|
| SIGTERM | docker stop | グレースフルシャットダウン(デフォルト) |
| SIGKILL | docker kill | 強制終了(クリーンアップなし) |
| SIGHUP | docker 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を使用してください。 - 実行可能なスクリプトは含まれていません。ガイダンスのみを提供します。
📚 公式ドキュメントの参考情報
🧭 Docker スキルの道のり
📍 現在地:
docker-run— ステップ 3:コンテナー管理と運用
← 前へ:docker-build — Dockerfile とイメージのビルド
→ 次へ:docker-networking / docker-storage / docker-compose