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

デフォルトでは、ホストマシンの計算能力へのアクセスは無制限です。 cpusパラメーターを使用してCPU制限を設定できます。 たとえば、最大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を使用してリソース消費を制御しました。