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

参考


Related #docker

docker-credential-desktop.exe not installed or not available in PATH

rm ~/.docker/config.jsonしたら起動できた

Cloud Datastoreのローカル環境をDockerで構築する

CloudDatastoreエミュレータとgoogle-cloud-guiの環境を構築

Extension fieldsを使ってdocker-composeのコンテナ設定を共通化する

Railsコンテナ設定を共通化して、commandだけそれぞれで変えるようにした

docker-composeコマンドのエイリアスを作る

dcコマンドを置き換えた

Dockerでpt-query-digestを使う

コンテナのおかげで手軽にslowlog分析ができるようになった

mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored.

windowsだとvolume mountすると777になるのでDockerfileを作ってcopyするようにした