St_Hakky’s blog

Data Science / Human Resources / Web Applicationについて書きます

【Docker】docker-composeのCPU/メモリ使用量の制限

こんにちは。

今仕事でメモリ使用量を最適化するような感じのタスクをやっていて、docker-composeのメモリ使用量を制限するやり方みたいなのを調べたのでまとめておきます*1

docker-composeのversion3を使っているのですが、version2のやり方で行けるかなーと思っていたら、行けなかったので、ついでにまとめました。

docker Engine自体のメモリ

docker自体のメモリが上限になるので、MAXがどこまで使用することができるのか確認する必要があります。

f:id:St_Hakky:20200508161033p:plain

基本的には、何も設定しないと、dockerで制限されているメモリを使い切ることができます。

メモリ制限の方法

docker-composeのfileのバージョンによって、制限方法が異なるので、そこに注意が必要とのことです。

ここからは、それぞれの場合に応じてまとめていきます。

Compose file : Version 2の場合

以下を参考に、設定してみます。

cpusは、version 2.2から追加されたっぽいので、docker-composeのファイルもそれ以上のバージョンを指定する必要があります。

version: '2.3'
  
services:
  nginx:
    image: nginx:alpine
    container_name: my-nginx
    ports:
      - "8080:80"
    mem_limit: 500m
    cpus: 0.5

以下のコマンドを叩くと、

$ docker-compose up

以下のような感じで設定できていることがわかります。

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
1d411cdf1d5f        my-nginx            0.00%               3.727MiB / 50MiB    7.45%               1.73kB / 0B         0B / 0B             5
Compose file : Version 3の場合

以下を参考に、設定してみます。


まずは、docker-composeのファイルに、以下のようなoptionを制限したいサービスに対して、設定します。

version: '3'

services:
  nginx:
    image: nginx:alpine
    container_name: my-nginx
    ports:
      - "8080:80"
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M

これで、以下のコマンドを叩きます。

$ docker-compose --compatibility up

すると、以下のような感じで設定できていることがわかります。

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
1d411cdf1d5f        my-nginx            0.00%               3.727MiB / 50MiB    7.45%               1.73kB / 0B         0B / 0B             5


以上です。

*1:最近物忘れが激しくて。。。