如何在docker compose file中限制系統資源的使用

前言

這也算是在舉辦 TSCCTF 中整理的一些資訊,因為題目都是放在docker container中跑,為了避免題目被打穿佔用資源影響到其他題目的正常運作,所以當時幫出題人員整理了一下在docker compose file中限制系統資源使用的方式。

不過現在docker中已經包含了compose組件,而compose組件吃的格式和docker-compose指令吃的格式有點不一樣,所以重新整理了這一篇文章。

格式

這兩種格式已經被棄用[1]

version 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: "2"
services:
service_name:
image: image_name

## 若沒有寫入的需求請一律使用read_only,volume也請使用ro掛載
read_only: true

## 若有寫入需求請註解掉read_only,改用以下兩行限制rootfs size
## 此選項只支援部分storage driver,在overlay2中只支援xfs
## https://docs.docker.com/reference/cli/docker/container/run/#storage-opt
# storage_opt:
# size: 1G

## 可使用的cpu數
cpus: 1

## 優先級,可不設定
## 可以理解為在資源不足時,容器搶資源的能力,按照cpu_share的比例來分資源,預設為1024
# cpu_shares: 1024

## 限制memory大小,視個別情況決定限制的大小
mem_limit: 1G

## 資源不足時啟用的限制,可不設定
# mem_reservation: 128M

version3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
## 請使用3.7以上
version: "3.7"
services:
service_name:
image: image_name

## 若沒有寫入的需求請一律使用read_only,volume也請使用ro掛載
read_only: true

## 若有寫入需求請註解掉read_only,改用以下兩行限制rootfs size
## 此選項只支援部分storage driver,在overlay2中只支援xfs
## https://docs.docker.com/reference/cli/docker/container/run/#storage-opt
# storage_opt:
# size: 1G

deploy:
resources:
limits:
## 可使用的cpu數,可以設定為小數
cpus: '1'
## 限制memory大小,視個別情況決定限制的大小
memory: 1G

## 資源不足時啟用的限制,可不設定
# reservations:
# cpus: '0.5'
# memory: 128M

docker-compose v3下必須在docker-compose後加上參數啟動

docker-compose --compatibility up -d

其實也可以用docker stack deploy --compose-file docker-compose.yml stack_name來deploy,但是必須先初始化docker stack

compose組件

這個版本的compose格式應該會是現行的版本,這部份參考自docker官網的文檔[2]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
services:
service_name:
image: image_name

## 若沒有寫入的需求請一律使用read_only,volume也請使用ro掛載
read_only: true

## 若有寫入需求請註解掉read_only,改用以下兩行限制rootfs size
#storage_opt:
#size: 1G

## 可使用的cpu數(還有很多其他的限制種類,可以在參考中查看)
cpus: 1

## 優先級,可不設定
#cpu_shares: 1024

## 限制memory大小,視個別情況決定限制的大小
mem_limit: 1G

## 資源不足時啟用的限制,可不設定
#mem_reservation: 128M

這個版本的格式不再需要指定version,使用docker compose -f compose.yml up -d啟動(如果在compose.yml的目錄可以不加-f)

參考


如何在docker compose file中限制系統資源的使用
https://www.zenwen.eu.org/docker-compose-file-limit-resource/
作者
Zen Wen
發布於
2024年6月7日
許可協議