Dockerコンテナでのレート制限とリソースの割り当ての実装には、Dockerの組み込みリソース制御メカニズムと潜在的に外部ツールを活用することが含まれます。 Dockerは主にCgroups(コントロールグループ)を使用してリソースの使用を管理します。これらのCGROUPを使用すると、個々のコンテナのCPU、メモリ、ブロックI/O、ネットワークI/Oを制限できます。
CPU制限:コンテナ作成中に--cpus
フラグを使用してコンテナのCPU使用を制限できます。たとえば、 docker run --cpus=1 my-image
コンテナを単一のCPUコアに制限します。また、小数値(半分のコアで--cpus=0.5
など)を使用して、分数CPU共有を指定することもできます。これはソフトリミットです。他のコンテナが使用していない場合、コンテナはより多くのCPUを取得する可能性がありますが、指定された制限を超えてはなりません。 CPUクォータ(ハード制限)は、CGROUP構成をより正確に管理できます。これは、より高度です。
メモリ制限: CPUの制限と同様に、メモリの制限は--memory
フラグを使用して設定されます。たとえば、 docker run --memory=1g my-image
コンテナを1ギガバイトのRAMに制限します。 --memory-swap
を使用してメモリスワップ制限を設定することもできます。メモリ制限を超えると、容器がDockerデーモンによって殺される可能性があります。
ブロックI/Oの制限:制限ブロックI/Oはあまり一般的ではありませんが、I/O集約型コンテナが他の容器を飢えさせるのを防ぐためには重要です。これは、 blkio
サブシステムに焦点を当てたCGROUP構成を直接介して直接行われます。読み取りおよび書き込みIOPS(1秒あたりの入力/出力操作)や帯域幅の制限などのパラメーターを指定する必要があります。
ネットワークI/O制限:これは後のセクションで詳細に説明されていますが、一般に、Dockerのコア機能以外のtc
(トラフィックコントロール)などのツールを使用してネットワークトラフィックを形作ることが含まれます。 Docker自体は、細粒のネットワークレートの制限を直接提供しません。
コンテナリソースの消耗を防ぐには、慎重なリソースの割り当て、監視、および積極的な管理を含む多面的なアプローチが必要です。ここにいくつかのベストプラクティスがあります:
--memory-reservation
と同様のリクエストフラグは有用であり、境界を強制するために--memory
と--cpus
を使用して常に厳しい制限を設定します。リクエストは好みのみを表明しますが、制限は制約を強制します。 Docker自体は、コンテナの細粒レート制限を直接提供していません。これを達成するには、外部ツールとテクニックを使用する必要があります。最も一般的なアプローチは、ホストマシンでtc
(トラフィックコントロール)を使用することです。 tc
使用すると、ソース/宛先IPアドレス、ポート、コンテナIDなどのさまざまな基準に基づいてトラフィックシェーピングルールを作成できます。
tc
の使用: Dockerコンテナの使用( eth0
、 docker0
)のネットワークインターフェイスを識別し、 tc
コマンドを使用してキューイングの分野( htb
- 階層トークンバケットなど)を作成して帯域幅を制限する必要があります。これには、複雑な構成が含まれ、ネットワークネームスペースを理解し、Dockerがネットワークインターフェイスをコンテナに割り当てる方法が必要です。他のネットワークトラフィックの混乱を避けるために、 tc
慎重に構成することが重要です。
代替ツール:他のツールは、ネットワークレートの制限を簡素化できます。一部のネットワークネームスペースソリューションとコンテナオーケストレーションプラットフォーム(Kubernetesなど)は、帯域幅を管理するための組み込みまたはプラグインベースのネットワークポリシーを提供します。これらのツールは、多くの場合、 tc
を直接使用する複雑さを抽象化します。
例(概念tc
使用法 - tc
とネットワーク構成の詳細な理解が必要です):
<code class="bash"># This is a simplified example and needs adaptation to your specific setup sudo tc qdisc add dev eth0 root tbf rate 10mbit burst 10kb latency 50ms sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit sudo tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 172.17.0.2 flowid 1:1</code>
これにより、(仮説的に)IPアドレス172.17.0.2から10 Mbpsのコンテナが制限されます。これは非常に単純化された例であり、慎重な構成が必要です。誤った構成は、ネットワークに深刻な影響を与える可能性があります。
いくつかのツールとテクニックは、Dockerリソースの使用とレートの制限の監視と管理に役立ちます。
docker stats
コマンドは、コンテナリソースの使用に関するリアルタイム情報を提供します。迅速なチェックに役立ちますが、長期監視にはあまり適していません。適切なリソース制限、監視ツール、およびネットワークレート制限の慎重な構成( tc
などのツールを使用)を組み合わせることにより、リソースの使用量を効果的に管理し、Docker環境でコンテナリソースの消耗を防ぐことができます。常に構成を徹底的にテストし、リソースの使用量を注意深く監視することを忘れないでください。
以上がDockerコンテナにレート制限とリソースの割り当てを実装する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。