Docker-Compose-file

Compos file 版本3以上

Compos file v3官网

build

只支持单机运行

1
2
3
4
5
6
7
8
version: "3" #指明版本3,docker stack需要版本3以上
services:
webapp:
build: #集群部署会忽略构建镜像,stack只支持提前构建好镜像
context: ./dir #构建上下文路径
dockerfile: Dockerfile-alternate #构建文件
args: #构建参数
buildno: 1

configs (swarm模式)

只支持集群模式运行,只需要在单机上引用,会自动在其他节点创建配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: "3.3"
services:
redis:
image: redis:latest
deploy:
replicas: 1
configs:
- my_config
- my_other_config
configs:
my_config:
file: ./my_config.txt
my_other_config:
external: true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: '3'
services:
nginx:
image: harbor.hcytech.dev/library/web-gate-id-v3:S3.2.1
restart: unless-stopped
ports:
- "88:80"
# volumes:
# - ./config/default.conf:/etc/nginx/conf.d/default.conf 不支持集群使用configs代替
configs:
- source: nginx_config
target: /etc/nginx/conf.d/default.conf
env_file:
- ./config/nginx.env #env也支持集群
configs:
nginx_config:
file: ./config/default.conf #支持集群

command

会覆盖dockerfile里面的命令例如:

1
2
command: bundle exec thin -p 3000 #docker-compose.yml覆盖dockerfile的命令
command: ["bundle", "exec", "thin", "-p", "3000"] #dockerfile等效于上面的命令

deploy(swarm模式)

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
version: '3.2'
services:
redis:
image: redis:alpine
labels: #容器上的标签
com.example.description: " containers 上的标签"
deploy:
mode: global #可选global(全局模式,每台机一个)/replicated(多台)
replicas: 6 #部署的总数量
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
endpoint_mode: vip #可选vip(默认)/dnsrr,主要是IP啥的
labels: #服务器上的标签
com.example.description: "This label will appear on the web service"
placement: #指定部署的信息
constraints:
- node.role == manager #只在管理节点运行
- engine.labels.operatingsystem == ubuntu 14.04
preferences:
- spread: node.labels.zone
resources: #资源限制
limits:
#cpu个数0.5指一个cpu的50%,2.00指2个cpu(猜测99%)其中docker stats命令可以查看cpu使用率和内存使用,其中cpu使用率是指单核的使用率,也就是如果cpus设置为2,使用率200%就代表2个核都使用达到了100%
cpus: '0.50'
memory: 50M
reservations:
cpus: '0.25'
memory: 20M
restart_policy: #重启策略
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
update_config: #更新配置策略
parallelism: 2
delay: 10s
order: stop-first
depends_on: #依赖的服务模块,在db启动才启动服务,但是不能保证db启动完,如果要设置启动顺序见
#https://docs.docker.com/compose/startup-order/
- db
- redis
healthcheck: #健康检查
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
logging: #日志服务
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
volumes: #自定义挂在卷
- type: volume
source: mydata
target: /data
volume:
nocopy: true
- type: bind
source: ./static
target: /opt/app/static
ports: #自定义端口
- target: 80
published: 8080
protocol: tcp
mode: host

问题

错误services.nginx.ports.0 must be a string or number是因为自定义端口,只支持3.2以上

1
2
3
4
5
6
version: '3.2' 
ports: #自定义端口
- target: 80
published: 8080
protocol: tcp
mode: host