コンテナ
実行、ライフサイクル、リソース制限
コンテナとは
コンテナはイメージから作成された実行インスタンスです。 イメージの読み取り専用レイヤーの上に、書き込み可能なレイヤーを追加して実行されます。
コンテナライフサイクル
Created
→Running
→Paused
orStopped
→Removed
Created
作成済み、未起動
Running
実行中
Paused
一時停止中(SIGSTOP)
Exited/Stopped
停止済み
コンテナ操作
1 # 実行 2 docker run nginx # フォアグラウンド 3 docker run -d nginx # バックグラウンド(デタッチ) 4 docker run -it ubuntu bash # インタラクティブ 5 docker run --rm nginx # 終了時に自動削除 6 docker run --name web nginx # 名前を指定 7 8 # 一覧 9 docker ps # 実行中のみ 10 docker ps -a # 全コンテナ 11 12 # 停止・開始 13 docker stop web # graceful stop(SIGTERM → SIGKILL) 14 docker start web 15 docker restart web 16 docker kill web # 即時停止(SIGKILL) 17 18 # 削除 19 docker rm web 20 docker rm -f web # 強制削除 21 docker container prune # 停止中のコンテナ全削除 22 23 # コンテナ内操作 24 docker exec -it web bash # コンテナ内でコマンド実行 25 docker attach web # メインプロセスにアタッチ 26 27 # ログ 28 docker logs web 29 docker logs -f web # フォロー 30 docker logs --tail 100 web # 最新100行 31 32 # 詳細情報 33 docker inspect web 34 docker stats # リアルタイムリソース使用量 35 docker top web # コンテナ内プロセス
ポート・ボリューム
1 # ポートマッピング 2 docker run -p 8080:80 nginx # ホスト8080 → コンテナ80 3 docker run -p 80 nginx # ランダムポート → コンテナ80 4 docker run -P nginx # EXPOSEされた全ポートをランダムマッピング 5 6 # ボリュームマウント 7 docker run -v /host/path:/container/path nginx # バインドマウント 8 docker run -v myvolume:/data nginx # 名前付きボリューム 9 docker run --mount type=bind,src=/host,dst=/container nginx 10 11 # 読み取り専用 12 docker run -v /host:/container:ro nginx 13 14 # ボリューム管理 15 docker volume create myvolume 16 docker volume ls 17 docker volume inspect myvolume 18 docker volume rm myvolume
リソース制限
cgroupsを使用してCPU、メモリ、I/Oを制限。 本番環境では必ず設定することを推奨。
1 # メモリ制限 2 docker run -m 512m nginx # 512MB制限 3 docker run --memory 1g nginx # 1GB制限 4 docker run --memory-swap 2g nginx # スワップ含む上限 5 6 # CPU制限 7 docker run --cpus 1.5 nginx # 1.5コア分 8 docker run --cpu-shares 512 nginx # 相対的な重み(デフォルト1024) 9 docker run --cpuset-cpus 0,1 nginx # 使用するCPUコア指定 10 11 # 組み合わせ 12 docker run -d \ 13 --name app \ 14 -m 512m \ 15 --cpus 1 \ 16 -p 8080:80 \ 17 myapp:latest
環境変数
1 # 環境変数を指定 2 docker run -e NODE_ENV=production nginx 3 docker run -e "DATABASE_URL=postgres://..." nginx 4 5 # ファイルから読み込み 6 docker run --env-file .env nginx 7 8 # .env ファイル例 9 # NODE_ENV=production 10 # DATABASE_URL=postgres://... 11 # SECRET_KEY=xxx
再起動ポリシー
--restart no再起動しない(デフォルト)
--restart always常に再起動。Docker起動時も自動起動
--restart unless-stopped手動停止以外は再起動
--restart on-failure:5異常終了時のみ、最大5回まで
SRE/インフラ観点
本番環境でのベストプラクティス
- • 必ずリソース制限を設定
- •
--restart unless-stoppedを使用 - • ヘルスチェックを設定(HEALTHCHECK命令)
- • ログはstdout/stderrに出力
トラブルシューティング
- •
docker logsでログ確認 - •
docker inspectで設定確認 - •
docker execでコンテナ内調査 - •
docker statsでリソース使用確認