[常用命令] Docker Compose 的写法规则

[复制链接]
查看19 | 回复0 | 昨天 13:59 | 显示全部楼层 |阅读模式

登录网站,浏览更多精彩内容

您需要 登录 才可以下载或查看,没有账号?加入我们

×
下面是一个 标准的 docker-compose.yml 文件结构,并附上详细的中文注释说明:

# docker-compose.yml

# 指定 Compose 文件版本(推荐使用 3.x 系列,如 '3.8')
# 不同版本支持的功能不同,3.x 适用于 Swarm 和大多数现代功能
version: '3.8'

# 定义服务(每个服务对应一个容器)
services:
  # 服务名称(自定义,如 web、db、redis 等)
  web:
    # 使用的镜像(可来自 Docker Hub 或私有仓库)
    image: nginx:latest
    # 或者通过构建上下文构建镜像(二选一)
    # build:
    #   context: ./app          # 构建上下文目录(Dockerfile 所在路径)
    #   dockerfile: Dockerfile  # 可选,指定 Dockerfile 文件名(默认就是 Dockerfile)

    # 容器名称(可选,默认是项目名_服务名_序号)
    container_name: my-nginx

    # 端口映射:宿主机端口:容器端口
    ports:
      - "8080:80"     # 将宿主机 8080 映射到容器 80

    # 挂载卷(数据持久化或代码热更新)
    volumes:
      - ./html:/usr/share/nginx/html  # 绑定挂载:本地目录 → 容器目录
      - my_volume:/data               # 使用命名卷(需在 volumes 中声明)

    # 环境变量(可直接写或从文件加载)
    environment:
      - NGINX_PORT=80
      - DEBUG=true
    # 或从 .env 文件加载(自动读取同目录下的 .env)
    # env_file:
    #   - .env

    # 依赖关系:确保 db 服务先启动
    depends_on:
      - db

    # 重启策略
    restart: unless-stopped  # always / on-failure / no(默认)

    # 网络配置(加入指定网络)
    networks:
      - mynet

    # 健康检查(可选)
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 3

  db:
    image: mysql:8.0
    container_name: my-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: myapp_db
    volumes:
      - db_data:/var/lib/mysql  # 使用命名卷存储数据库数据
    networks:
      - mynet
    restart: unless-stopped

# 定义命名卷(用于持久化数据)
volumes:
  my_volume:    # 卷名,可被 services 中引用
  db_data:

# 定义自定义网络(默认会创建 bridge 网络)
networks:
  mynet:
    driver: bridge  # 默认驱动,也可用 overlay(用于 Swarm)

✅ 关键规则说明

元素
说明
缩进
YAML 对缩进敏感,必须用空格(不能用 Tab)
版本
version 字段决定可用功能(建议用 3.8 或 3.9)
服务名
services 下的每个子项是一个服务,对应一个容器
image vs build
二者通常只用其一:image 直接拉镜像,build 从源码构建
端口格式
"宿主机:容器",字符串形式(避免 YAML 解析为数字)
环境变量
environment 写键值对,敏感信息建议用 .env 文件
depends_on
仅控制启动顺序,不等待服务就绪(如 MySQL 启动完成)
volumes
分为绑定挂载(本地路径)和命名卷(由 Docker 管理)
networks
多个服务加入同一网络才能通过服务名互相通信
常用技巧补充
  • .env 文件:放在 docker-compose.yml 同目录,自动加载环境变量

DB_PASSWORD=secret123

  • 在 compose 中使用:MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
  • 覆盖配置:可用 docker-compose.override.yml 自动覆盖开发配置(无需 -f)。
  • 多文件组合:
    docker-compose -f docker-compose.yml -f docker-compose.prod.yml up

    示例:最小可用 Compose 文件
  1. version: '3.8'
  2. services:
  3.   hello:
  4.     image: alpine
  5.     command: echo "Hello Docker Compose!"
复制代码
运行:
docker-compose up


商乾电商学院,中国最大的电商资源交流基地!

1687

主题

401

回帖

32万

积分

管理员

积分
320145
学费
275781
QQ