DockerでのメモリとCPUの制限の設定
1. 概要
Dockerホストマシンのリソースの使用を制限する必要がある場合が多くあります。
このチュートリアルでは、DockerコンテナのメモリとCPUの制限を設定する方法を学習します。
2. dockerrunでリソース制限を設定する
docker run コマンドを使用して、リソース制限を直接設定できます。 それは簡単な解決策です。 ただし、制限はイメージの1つの特定の実行にのみ適用されます。
2.1. メモリー
たとえば、コンテナが使用できるメモリを512メガバイトに制限しましょう。 メモリを制限するには、mパラメータを使用する必要があります:
$ docker run -m 512m nginx
予約と呼ばれるソフト制限を設定することもできます。 Dockerがホストマシンのメモリ不足を検出するとアクティブになります。
$ docker run -m 512m --memory-reservation=256m nginx
2.2. CPU
デフォルトでは、ホストマシンの計算能力へのアクセスは無制限です。
$ docker run --cpus=2 nginx
CPU割り当ての優先度を指定することもできます。 デフォルトは1024で、数値が大きいほど優先度が高くなります。
$ docker run --cpus=2 --cpu-shares=2000 nginx
メモリ予約と同様に、CPU共有は、計算能力が不足していて、競合するプロセス間で分割する必要がある場合に主要な役割を果たします。
3. docker-composeファイルを使用したメモリ制限の設定
docker-composeファイルを使用して同様の結果を得ることができます。 フォーマットと可能性はdocker-composeのバージョンによって異なることに注意してください。
3.1. バージョン3以降dockerswarm
CPUの半分と512メガバイトのメモリのNginxサービス制限と、CPUの4分の1と128メガバイトのメモリの予約を与えましょう。 サービス構成に「デプロイ」セグメントを作成してから「リソース」セグメントを作成する必要があります:
services:
service:
image: nginx
deploy:
resources:
limits:
cpus: 0.50
memory: 512M
reservations:
cpus: 0.25
memory: 128M
docker-composeファイルのdeployセグメントを利用するには、docker stackコマンドを使用する必要があります。スタックをswarmにデプロイするには、deployコマンドを実行します。
$ docker stack deploy --compose-file docker-compose.yml bael_stack
3.2. docker-composeを使用したバージョン2
docker-compose、の古いバージョンでは、サービスのメインプロパティと同じレベルにリソース制限を設定できます。 また、名前も少し異なります。
service:
image: nginx
mem_limit: 512m
mem_reservation: 128M
cpus: 0.5
ports:
- "80:80"
構成済みのコンテナーを作成するには、docker-composeコマンドを実行する必要があります。
$ docker-compose up
4. リソースの使用状況の確認
制限を設定したら、 dockerstatsコマンドを使用して制限を確認できます。
$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
8ad2f2c17078 bael_stack_service.1.jz2ks49finy61kiq1r12da73k 0.00% 2.578MiB / 512MiB 0.50% 936B / 0B 0B / 0B 2
5. 概要
このチュートリアルでは、Dockerのホストのリソースへのアクセスを制限する方法について説明しました。 dockerrunおよびdocker-composeコマンドの使用法を調べました。 最後に、 dockerstatsを使用してリソース消費を制御しました。