コンテナリソース制限
DockerコンテナのCPUとメモリ制限を設定。リソース制約、OOMキラーの動作、CPUシェア、リソース使用量の監視を学びます。
Container Lifecycle
詳細な説明
メモリ制限
コンテナがホストの全メモリを消費するのを防ぐためにハードメモリ制限を設定:
# 512MB RAMに制限
docker run -d --memory=512m my-app
# メモリ+スワップ制限
docker run -d --memory=512m --memory-swap=1g my-app
# スワップを完全に無効化
docker run -d --memory=512m --memory-swap=512m my-app
OOMキラーの動作
コンテナがメモリ制限を超えると、Linux OOMキラーがコンテナを終了します。以下で制御:
# OOMキラーを無効化(コンテナは終了せずハングする)
docker run -d --memory=512m --oom-kill-disable my-app
# OOM優先度を調整(-1000〜1000、低いほど終了されにくい)
docker run -d --memory=512m --oom-score-adj=-500 my-app
CPU制限
# 1.5 CPUに制限
docker run -d --cpus=1.5 my-app
# CPUシェア(相対的な重み、デフォルト1024)
docker run -d --cpu-shares=512 my-app
# 特定のCPUコアに固定
docker run -d --cpuset-cpus="0,1" my-app
リソース使用量のモニタリング
# リアルタイム統計
docker stats my-app
# 単一スナップショット
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" my-app
# inspectで制限を確認
docker inspect --format '{{.HostConfig.Memory}}' my-app
Docker Composeでの設定
services:
api:
image: my-api
deploy:
resources:
limits:
cpus: '2.0'
memory: 1G
reservations:
cpus: '0.5'
memory: 256M
ユースケース
本番環境で暴走コンテナがホストリソースを使い果たすのを防止、マルチテナント環境での公平なリソース共有の設定、CI/CDビルドコンテナの適切な制限の設定。