Docker リソース制限コンバーター
docker run のリソースフラグ (--cpus, --memory, --pids-limit など) を HostConfig の値、Compose の deploy.resources、実際の cgroup v2 設定に変換します。
入力と主要な処理をブラウザ内で行い、その入力内容をQuickKitサーバーへ送信しない設計です。
docker run フラグ
HostConfig (大きな整数は文字列表示)
cgroup v2 の値
Compose deploy.resources
仕組みと使い方
9007199254740991 を超える値は、桁を失わないよう HostConfig JSON では10進文字列で表示します。通常値は数値のままです。この表示用 JSON は Engine API へのリクエストではありません。整数フラグは既存の10進構文に対応し、int64 上限 (9223372036854775807) を超える値は拒否します。メモリ値は2進単位を使い10進数として厳密に計算し、1バイト未満を切り捨てます。go-units の float64 解析と異なり、大きな値を丸めません。切り捨て後の 0 は Docker の未設定・デフォルト相当で、メモリ制限や予約は適用されません。メモリの自動2倍値が int64 を超える場合は memory-swap を明示してください。HostConfig は、説明したデーモン補正を除き解析値を表示します。極端な値が実行時に受理されることは保証しません。docker run のリソースフラグを、デーモンが実際に保存・適用する値に変換します。--cpus=N は Docker CLI と同様に厳密に解析します。HostConfig.NanoCpus は N x 1e9 で、整数でなければならないため、小数点以下 10 桁以上の値は丸めずに「精度が高すぎる」として拒否します (このツールは 10 進小数表記のみ受け付けます。CLI は 3/2 のような分数も受け付けます)。cgroup レベルでは、デーモンは常に固定の 100000 マイクロ秒周期と切り捨ての整数除算で cpu.max = floor(NanoCpus x 100000 / 1e9) 100000 を導出するため、--cpus=0.666666666 の quota は 66667 ではなく 66666 になります。この切り捨てにより、--cpus が 0.00001 未満だと導出 quota は 0 になり、runc は cgroup v2 に CpuQuota 0 を渡し、cgroup v2 は cpu.max = max 100000 と書き込むため quota は一切適用されません。--cpus が 0.00001 以上 0.01 未満では導出 quota が 1〜999 マイクロ秒でカーネルの CFS 最小値 1ms を下回るため、コンテナは起動時に拒否されます。--cpus が 0.01 以上であれば制限が適用されます。このツールは結果の cpu.max を表示し、前者 2 つの領域では警告を出します。--cpus は正の --cpu-period または正の --cpu-quota とは併用できません。デーモンは競合するオプション (NanoCPUs > 0 かつ CPUPeriod > 0 または CPUQuota > 0) として拒否するため、このツールも値を合成せずエラーとして報告します。0 は 3 つのフラグすべてで Docker の未設定・デフォルト相当です。--cpus=0 は NanoCpus 0 で CPU 制限を設定せず (Compose も limits.cpus の 0 を無視するため cpus: 行は出力しません)、--cpu-period=0 / --cpu-quota=0 は HostConfig には保存されますがデーモンが OCI spec を組むときにスキップされるため、--cpus と競合せず cpu.max も変えません。--cpu-shares=0 は未設定・no-op 相当です。--cpu-shares、--cpu-period、--cpu-quota はそれ以外の場合、そのまま HostConfig に渡されます。デーモンはまず競合を確認し、次に 0 以外の --cpu-period に 1000〜1000000 マイクロ秒、正の --cpu-quota に 1000 マイクロ秒以上を要求するため、このツールも同じ順序で同じ確認を行います。--cpu-quota=-1 は quota なしを意味し、cpu.max は max <period> になります。デーモンの競合チェックは -1 を無視するため、--cpus と --cpu-quota=-1 の併用は受理されて CPU 制限が一切かからない状態になります。このツールはその状態を警告します。-1 以外の負の --cpu-quota はモデル化していません。--pids-limit の正値は保持して pids.max に表示します。0 と -1 は無制限で、Moby は create 時に PidsLimit を nil に正規化するため HostConfig の表示から省略し、元の docker run フラグは残します。Moby は歴史的互換性のため他の負値も受理しますが、このツールは 0 と -1 のみ対応します。メモリの単位 b/k/m/g は2進数 (1024 進) で、512m は 536870912 バイトです。--memory が正値で、--memory-swap が未指定または解析後 0 の場合、Docker は MemorySwap を Memory の2倍に自動設定します。これはスワップなしを期待する人には意外な挙動です。--memory-swap=-1 はスワップ無制限を意味し、--memory と同じ値にするとスワップなしになります。Compose の deploy.resources.limits は docker compose up でも cpus と memory については有効ですが、deploy セクション全体は本来 Swarm 向けであり、replicas や placement、update_config、restart_policy など他の多くのキーは Swarm モード以外の docker compose up では無視されます。このツールは deploy を docker run フラグの完全な代替として扱いません。memory.high に対応する docker run フラグは存在しないため、このツールはその値を推測しません。