こんにちは。
今仕事でメモリ使用量を最適化するような感じのタスクをやっていて、docker-composeのメモリ使用量を制限するやり方みたいなのを調べたのでまとめておきます*1。
docker-composeのversion3を使っているのですが、version2のやり方で行けるかなーと思っていたら、行けなかったので、ついでにまとめました。
docker Engine自体のメモリ
docker自体のメモリが上限になるので、MAXがどこまで使用することができるのか確認する必要があります。
基本的には、何も設定しないと、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:最近物忘れが激しくて。。。