CodeGym /コース /Docker SELF /コンテナリソースの管理

コンテナリソースの管理

Docker SELF
レベル 12 , レッスン 0
使用可能

6.1 コンテナのリソースを制限する理由

Dockerはコンテナのリソース管理にめっちゃうまく対応してて、システムのパワーを効率的に分配したり、コンテナ間の無駄な衝突を回避することができるんだ。これが特に大事なのは、1つのコンテナのアプリが全部のリソースを「食い潰して」、他のサービスの動作を止めちゃうのを防ぐためだよ。CPUやメモリみたいなリソースを制限することで、オーバーロードを回避し、システムの安定性を保ちつつ、どのアプリも予測可能な動作を保証できる。今回の講義では、CPUとメモリの使用にリミットを設定する方法を詳しく説明するよ。これでシステムが高負荷状態でもちゃんと効率的に動作できるようになるんだ!

コンテナのリソースを制限するのが大事な理由:

  1. 安定性: 1つのコンテナが全リソースを持っていっちゃって、他のコンテナやシステム自体が遅くなるのを防ぐため。
  2. 効率性: コンテナ間でリソースをより良く分配して、システムのパワーを最大限に活かすため。
  3. 保護: リソースを制限することで、コンテナがうっかり、または意図的にシステムをオーバーロードするのを防ぐため。

6.2 CPU使用制限

Dockerは、コンテナが使用するCPUを制限するためのいくつかの方法を提供してるよ。

重要! ここでのCPUはプロセッサのコア1つを意味してて、プロセッサ全体じゃないよ。クアッドコアのプロセッサなら、4つのCPUがあるってことね。

1. CPUシェアの制限 (--cpu-shares)

パラメータ--cpu-sharesは、コンテナがCPUを使う際の優先順位の相対値を設定するよ。デフォルト値は1024で、これは相対的な値だから、例えば--cpu-shares=512のコンテナは--cpu-shares=1024のコンテナに比べて半分の優先度になるって感じ。

使用例:

この例では、high_priority_containerコンテナがlow_priority_containerコンテナよりもCPU割り当ての優先度が高くなるよ。

ターミナル

docker run -d --name low_priority_container --cpu-shares=512 nginx

docker run -d --name high_priority_container --cpu-shares=2048 nginx

2. CPU数の制限 (--cpus)

パラメータ--cpusで、コンテナに割り当てられるCPUの正確な数を設定できるよ。例えば、1.5って値を指定すると、そのコンテナは1.5CPUを使えるってことになる。

使用例:

この例では、limited_cpu_containerコンテナが1.5CPU以上使わないように制限されるよ。

ターミナル


        docker run -d --name limited_cpu_container --cpus="1.5" nginx
    

3. CPU時間の使用制限 (--cpu-quota--cpu-period)

パラメータ--cpu-quota--cpu-periodを使うと、CPUの使用をさらに細かく調整できるよ。--cpu-periodはマイクロ秒単位で時間間隔を設定(デフォルトは100000)、--cpu-quotaはその間にCPUを使う最大時間を設定するんだ。

使用例:

この例では、custom_cpu_quota_containerコンテナがCPUを最大で50%(25000/50000)しか使わないように設定されてるよ。

ターミナル


        docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx

6.3 メモリ使用の制限

メモリ制限は、コンテナがどれだけのRAMを使用できるかをコントロールする方法だよ。これにより、1つのコンテナがメモリを「食い尽くして」、他のプロセスやコンテナに影響を与える状況を防ぐことができるんだ。

1. 最大メモリ使用量の制限 (--memory)

パラメータ --memory は、コンテナが使用できるメモリの上限を設定するんだ。この制限を超えると、システムがコンテナを終了させるよ。

使用例:

この例では、コンテナ limited_memory_container を最大512 MBのRAMのみ使用するように制限してるよ。

Terminal

docker run -d --name limited_memory_container --memory="512m" nginx

2. メモリスワップ量の制限 (--memory-swap)

パラメータ --memory-swap は、RAMとスワップの合計上限を設定するんだ。例えば、--memory が512 MBに設定されていて、--memory-swap が1 GBなら、コンテナは512 MBのRAMとさらに512 MBのスワップを使用できるよ。

使用例:

この例では、コンテナ swap_limited_container を512 MBのRAMと512 MBのスワップのみ使用するように制限してるんだ。

Terminal

docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx

3. スワップなしでメモリを制限 (--memory-swap=-1)

スワップの使用を禁止するには、パラメータ --memory-swap を -1 に設定すればOKだよ。

使用例:

この例では、コンテナ no_swap_container を512 MBのRAMだけ使用可能で、スワップは一切使わないようにしているんだ。

Terminal

docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx

6.4 実際のシナリオ

1. 高優先度と低優先度のタスクの実行

1つのサーバーで重要なタスクと二次的なタスクが実行されている場合、--cpu-shares パラメータを使用して、重要なタスクがより多くの CPU を受け取るようにリソースを分配できます。

ターミナル

docker run -d --name high_priority_task --cpu-shares=2048 my_high_priority_image
docker run -d --name low_priority_task --cpu-shares=512 my_low_priority_image

2. テスト用のリソース制限

制限されたリソース環境でアプリケーションをテストする場合、CPU やメモリに厳密な制限を設定できます。これにより、アプリケーションがそのような制限下でどのように動作するかを理解するのに役立ちます。

ターミナル

docker run -d --name test_container --cpus="1" --memory="256m" my_test_image

3. リソースの枯渇防止

1つのコンテナがシステムのすべての利用可能なリソースを使用しないようにするために、すべてのコンテナに対してメモリと CPU の制限を設定できます。

ターミナル

docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION