元ネタはこちら。
元ネタではDocker(docker
コマンド)単体で制限設定を行ってましたが、同じことをDocker Compose (v3)で指定する場合はどうするかについて。
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のリソース設定のマニュアル見るまで気付かなかったけど、Kubernetesのrequests
と同じような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ドライバであればそれぞれのドライバのドキュメントを参照。
(参考) 全体の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"