docker-compose.yamlでCPUとメモリ制限をかける
docker-composeでコンテナを立てる際に、デフォルトだとホストのリソースをフルで使ってしまう。
コンテナごとにCPU数とメモリ量を制限したかったので対応方法を調べた。
公式ドキュメントにあるようにVersion3の場合、deployキーを設定することで制限をかけることができる。
mysqlコンテナで1CPU, 1GBメモリに制限する場合は↓のようになる。
version: "3"
services:
mysql:
image: mysql:8
ports:
- "3306:3306"
deploy:
resources:
limits:
cpus: '1'
memory: 1g
ただ、deployキーはswarmモードの場合のみ有効になるとのことで、compose up時にcompatibilityオプションを付与する必要があった。
このオプションを指定することでVersion2互換モードとなりVersion2のcpu_sharesとmem_limitに変換してくれるとのこと。
docker-compose --compatibility up
正しく制限がかけれているかはstatsで確認できる。
docker stats