はじめに
デフォルトでは、DockerコンテナはホストのRAMおよびCPUリソース全体にアクセスできます。これらのデフォルト設定で実行したままにすると、パフォーマンスのボトルネックが発生する可能性があります。
DockerのメモリとCPU使用率を制限しない場合、Dockerはすべてのシステムリソースを使用できます。
このチュートリアルでは、DockerコンテナのメモリとCPU使用率を制限する方法を学びます。
リソースの制限を有効にするようにシステムを構成する
リソースが限られているコンテナを実行する前に、システムがこのDockerオプションをサポートしているかどうかを確認してください。このガイドでは、Ubuntuでこれを行う方法と、必要に応じてこの機能を有効にする方法について説明します。
1.まず、次のコマンドを実行します:
sudo docker info
出力を受け取った場合WARNING: No swap limit support
、リソースの制限はデフォルトでは有効になっていません。
2.このオプションを追加するには、grub構成ファイルを編集します。選択したテキストエディタでファイルを開きます(nanoを使用しています):
sudo nano /etc/default/grub
3.次に、次の行を追加します。
GRUB_CMDLINE_LINUX="cdgroup_enable=memory swapaccount=1"
4.変更を保存して、ファイルを終了します。
5.次に、次のコマンドを使用してgrub構成を更新します。
sudo update-grub
6.最後に、変更を行うためにマシンを再起動します。
7. docker info
を再実行して、特定のDocker機能が正常に有効になったことを確認します コマンド。
Dockerコンテナのメモリアクセスを制限する
Dockerコンテナに設定できるRAMの制限がいくつかあります。それらのいくつかは次のとおりです。
- コンテナが使用できるメモリの最大量を設定します。
- Dockerコンテナがディスクにスワップできるメモリの量を定義します。
- コンテナに割り当てられるメモリ量のソフト制限を設定します。
以下で、Dockerのメモリ制限を構成する方法を確認してください。
最大メモリアクセスの設定
コンテナのメモリ使用量の最大量を制限するには、 --memory
を追加します docker run
のオプション 指図。または、ショートカット -m
を使用することもできます 。
コマンド内で、その特定のコンテナーに割り当てるメモリの量を指定します。
コマンドは次の構文に従う必要があります:
sudo docker run -it --memory="[memory_limit]" [docker_image]
memory_limit
の値 正の整数の後に接尾辞bを付ける必要があります 、 k 、 m 、または g (バイト、キロバイト、メガバイト、またはギガバイトの略)。たとえば、1 GBのRAMを搭載したコンテナを制限するには、 --memory="1g"
を追加します。 。
たとえば、Ubuntuコンテナのインスタンスを実行し、メモリ制限を1 GBに設定するには、コマンドは次のとおりです。
sudo docker run -it --memory="1g" ubuntu
スワップをディスクメモリ制限に設定
swap
を使用する オプションを使用すると、コンテナに割り当てられたすべてのRAMが使い果たされた後でもデータを保存できます。これは、メモリの制限を無視し、ディスクに直接書き込むことによって行われます。これは便利な機能ですが、パフォーマンスが低下するため、お勧めしません。
この追加のRAMスペースを構成するには、スワップメモリの合計量を定義します。これを行う前に、すでに最大メモリ( --memory
)が必要です。 )非スワップメモリセットの。スワップには、非スワップメモリの合計量が含まれます プラススワップメモリの量 バックアップとして予約されています。
たとえば、 --memory
を設定した場合 1 GB 、上記の例のように、スワップメモリの量はそれより多くする必要があります。 追加でコンテナを実行するには 1 GB スワップメモリの場合、スワップメモリを 2 GBに設定します 。
限られたメモリと追加のスワップメモリでコンテナを実行するための構文は次のとおりです。
sudo docker run -it --memory="[memory_limit]" --memory-swap="[memory_limit]" [docker_image]
たとえば、Ubuntuイメージからコンテナを実行し、使用するコンテナに1 GBのRAMを割り当て、スワップメモリ用に1 GBのRAMを予約するには、次のように入力します。
sudo docker run -it --memory="1g" --memory-swap="2g" ubuntu
ソフト制限をコンテナメモリに設定
--memory
を使用してコンテナのメモリ使用量を制限する 基本的に、超えられないハード制限を設定しています。または、ソフト制限を設定することもできます( --memory-reservation
)コンテナが割り当てられたメモリの終わりに達したときに警告しますが、サービスは停止しません。
--memory
の場合 制限は設定されていません。--memory-reservation
でソフト制限を設定します。 コンテナスペースを完全に制限するわけではありません。両方の機能を有効にしている場合、ソフト制限は常に最大スペース容量よりも低くなります。
例として、Ubuntuコンテナが 750 MBのメモリ予約を持つ場合 および1BGの最大RAM容量 、次のコマンドを使用します:
sudo docker run -it --memory="1g" --memory-reservation="750m" ubuntu
DockerコンテナのCPU使用率を制限する
RAMの使用量と同様に、DockerコンテナにはホストのCPUに対するデフォルトの制限はありません。コンテナに無制限のCPU使用率を与えると、問題が発生する可能性があります。
コンテナに割り当てるホストマシンのCPUリソースの量を定義する方法はいくつかあります。
たとえば、2つのCPUを搭載したホストがあり、そのうちの1つにコンテナアクセスを許可する場合は、オプション --cpus="1.0"
を使用します。 。 1つのCPUにアクセスできるUbuntuコンテナを実行するためのコマンドは次のようになります。
sudo docker run -it --cpus="1.0" ubuntu
--cpu-shares
を使用することもできます コンテナにCPUサイクルの割合を増減させるオプション。デフォルトでは、これは 1024に設定されています 。
CPU共有が少ないコンテナを実行するには、次のコマンドを実行します。
sudo docker run -it --cpus-shares="700" ubuntu
コンテナのCPU使用率を制限するためのその他のオプションについては、Dockerの公式ドキュメントを参照してください。