コンテナリソース制限

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ビルドコンテナの適切な制限の設定。

試してみる — Docker CLI Reference

フルツールを開く