Docker Compose 配置参数详解

什么是 Docker Compose

  • Docker 是运行 单个容器 的工具

  • Docker Compose 是运行 一组容器(多服务) 的工具

1️⃣ 顶级字段

version: "3.9"  # Compose 文件版本
services:       # 服务列表
volumes:        # 卷(持久化数据)
networks:       # 自定义网络
configs:        # 配置文件(Docker Swarm)
secrets:        # 秘密信息(Docker Swarm)
  • version:指定 Compose 文件格式版本

    • V3+ 适合 Swarm / Kubernetes 部署

    • 也可以不写,默认最新版本

  • services:必选字段,定义一组容器服务

  • volumes / networks:可选,定义共享卷和自定义网络

  • configs / secrets:Swarm 集群使用,用于配置管理和敏感信息


2️⃣ services 字段详解

每个服务类似一个容器,常用参数如下:

参数类型说明
buildstring / dict构建镜像的路径或配置,例如 . 或带 context、dockerfile
imagestring使用已有镜像,例如 postgres:15-alpine
container_namestring容器名字(方便 docker ps 查看)
commandstring / list覆盖 Dockerfile CMD,指定容器启动命令
entrypointstring / list覆盖 Dockerfile ENTRYPOINT
environmentlist / dict环境变量,可用 ${VAR} 引用 .env 文件
portslist端口映射,格式 "宿主机:容器""8000:80/tcp"
volumeslist挂载卷或目录,格式 "宿主机路径:容器路径"
depends_onlist声明服务启动依赖,Compose 会按顺序启动
restartstring容器重启策略,如 no, always, on-failure, unless-stopped
networkslist / dict指定网络,默认在 default 网络下
working_dirstring容器内工作目录(类似 Dockerfile WORKDIR)
userstring以指定用户运行容器,例如 "1000:1000"
ttybool是否分配伪终端,调试用
stdin_openbool是否保持 stdin 打开
healthcheckdict健康检查配置,例如命令、间隔、重试次数
depends_on.conditionstring可指定依赖启动条件:service_startedservice_healthy

2.1 build 参数支持

build:
  context: .         # 构建上下文路径
  dockerfile: Dockerfile.prod  # 指定 Dockerfile 文件
  args:               # 构建时变量
    APP_ENV: production
  target: builder     # 多阶段构建阶段

2.2 environment 支持格式

environment:
  - DEBUG=1
  - SECRET_KEY=${SECRET_KEY}
# 或者字典方式
environment:
  DEBUG: "1"
  SECRET_KEY: "${SECRET_KEY}"
  • 可以在项目根目录放 .env 文件,Compose 会自动读取

  • 可在命令行 docker compose up --env-file ./myenv 指定文件


2.3 volumes 支持

volumes:
  - ./code:/app       # 本地目录挂载
  - postgres_data:/var/lib/postgresql/data  # 命名卷
  - type: bind
    source: ./config
    target: /app/config
    read_only: true

2.4 ports 支持

ports:
  - "8000:8000"       # host:container
  - "443:443/tcp"     # 指定协议

2.5 restart 策略

策略说明
no不自动重启(默认)
always容器退出无论状态都重启
on-failure仅在非 0 退出码时重启
unless-stopped除非手动停止,否则重启

2.6 healthcheck 健康检查

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 5s
  • 容器状态会标记为 healthy / unhealthy

  • 可以配合 depends_on.condition: service_healthy 控制启动顺序


3️⃣ volumes & networks

3.1 volumes(持久化数据)

volumes:
  postgres_data:
  redis_data:
  • 命名卷由 Docker 管理

  • 也可以直接挂载宿主机路径

3.2 networks(自定义网络)

networks:
  frontend:
  backend:
  • Compose 会默认创建 default 网络

  • 可以自定义网络,控制服务间通信范围


4️⃣ docker-compose 常用命令

命令说明
docker compose up构建并启动服务
docker compose up -d后台启动
docker compose down停止并删除容器、网络
docker compose build构建镜像
docker compose logs查看日志
docker compose exec <service> bash进入容器
docker compose ps查看服务状态
docker compose stop/start/restart停止/启动/重启服务
docker compose config查看完整配置,合并继承、环境变量

5️⃣ 高级技巧

  1. 多环境配置

    • dev / prod 两个 Compose 文件:

      docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

    • 后面文件会覆盖前面的设置

  2. 扩缩容

    docker compose up --scale worker=3 -d
    • worker 容器可以水平扩展

  3. 依赖顺序

    • depends_on + healthcheck 配合使用,确保服务按顺序启动

  4. 共享镜像

    • 多个服务可以使用同一个 build: .image: xxx

    • 只构建一次镜像,多容器共享


✅ 总结

  • Docker Compose 核心是 services

  • 常用参数:build, image, volumes, ports, environment, depends_on, command, restart

  • 高级特性:healthcheck, 多环境 override, scale

  • volumes 挂载宿主机目录适合开发,生产通常用命名卷

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清静诗意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值