zaki work log

作業ログやら生活ログやらなんやら

[Docker Compose] cpu / memory / ログサイズの制限を指定する

元ネタはこちら。

zaki-hmkc.hatenablog.com

zaki-hmkc.hatenablog.com

元ネタではDocker(dockerコマンド)単体で制限設定を行ってましたが、同じことをDocker Compose (v3)で指定する場合はどうするかについて。

docs.docker.com

cpu / memory

deploy/resourcesで設定します。
例えばCPUは0.3、メモリは512MBであれば以下の通り。

docker runであれば--cpus 0.3 -m 512mと同等。

    deploy:
      resources:
        limits:
          cpus: '0.3'
          memory: 512m

デプロイされたコンテナをinspectすると以下のように出力される。

        "HostConfig": {
            [...]
            "Memory": 536870912,
            "NanoCpus": 300000000,

ちなみに、Composeのリソース設定のマニュアル見るまで気付かなかったけど、Kubernetesrequestsと同じようなreservationsって指定もできるみたい?(動作未確認 / K8sと同じならその起動時に指定分のリソースが無かったら起動できない、かな?)

なお、この指定はDocker Compose File v3の書式。v2だと異なります。

ログサイズ

loggingで設定します。

ログドライバにjson-fileを使用し、そのサイズを10KBに制限するには以下の通り。
json-fileで使えるオプションについてはJSON File logging driverを参照。

    logging:
      driver: json-file
      options:
        max-size: 10k

これでデプロイされたコンテナをinspectすると、以下の内容を確認できる。

        "HostConfig": {
            [...]
            "LogConfig": {
                "Type": "json-file",
                "Config": {
                    "max-size": "10k"
                }
            },

json-file以外、例えばSyslogドライバであればそれぞれのドライバのドキュメントを参照。

docs.docker.com

(参考) 全体のDocker Composeファイル

version: '3'
services:
  my-httpd:
    image: httpd
    ports:
    - 24080:80
    deploy:
      resources:
        limits:
          cpus: '0.3'
          memory: 512m
    logging:
      driver: json-file
      options:
        max-size: 10k
  client:
    image: centos:7
    command:
    - "tail"
    - "-f"
    - "/dev/null"