元ネタはこちら。
元ネタでは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"