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

# 多描点组合

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

# 描点覆盖

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
上次更新: 2025/02/27, 02:17:40
最近更新
01
G1垃圾收集器的参数调优
02-23
02
内存占用过大排查
01-14
03
MySQL数据迁移
11-27
更多文章>