docker-compose笔记
# 变量问题
通过${}
设置变量,例如 image: product:${IMAGE_VERSION}
,使用命令IMAGE_VERSION=1.0.0 docker-compose up
启动可将变量传入。
但是如果是shell命令中要使用$
取值,而不是作为变量传入,则需要&&
进行转义.
例如Java
项目设置JAVA_OPTS: "-Xloggc:/root/log/dump/allspark-vc/gc-$$(date +%Y%m%d%H%M%S).log"
,这里希望日志文件是动态命名的,所以需要使用$(date +%Y%m%d%H%M%S)
取值,为了与变量区分,所以使用$$(date +%Y%m%d%H%M%S)
。
# 变量默认值
格式${变量名:-默认值}
,注意需要有:-
,例如image: product:${IMAGE_VERSION:-1.0.0}
,如果IMAGE_VERSION
未定义,则默认为1.0.0
。
# 描点与引用
&
定义描点
*
引用描点
<<
插入描点
x-
自定义字段,不会被docker-compose
解析,可以用于定义变量、模板等。
# 示例
# 基本用法
version: '3'
services:
# 使用 &base-service 定义一个锚点
app-base: &base-service
image: nginx:alpine
restart: always
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
# 使用 << 和 * 引用并扩展基础配置
web:
<<: *base-service # 引用并合并 base-service 的所有配置
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
# 另一个服务也引用相同的基础配置
api:
<<: *base-service # 引用并合并 base-service 的所有配置
ports:
- "8080:80"
environment:
- API_MODE=production
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
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
# 多描点组合
version: '3'
# 定义通用的环境变量锚点
x-environment: &common-env
POSTGRES_USER: user
POSTGRES_PASSWORD: password
# 定义通用的卷配置锚点
x-volumes: &db-volumes
- db-data:/var/lib/postgresql/data
services:
db:
image: postgres:13
environment:
<<: *common-env # 合并环境变量
POSTGRES_DB: maindb
volumes: *db-volumes # 直接引用卷配置
db-test:
image: postgres:13
environment:
<<: *common-env # 复用相同的环境变量
POSTGRES_DB: testdb
volumes: *db-volumes # 复用相同的卷配置
volumes:
db-data:
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
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
# 描点覆盖
version: '3'
services:
base: &base
image: node:14
working_dir: /app
restart: always
api:
<<: *base # 引入基本配置
image: node:16 # 覆盖基本配置中的镜像
ports:
- "3000:3000" # 添加新属性
command: npm start # 添加新属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
编辑 (opens new window)
上次更新: 2025/02/27, 02:17:40