docker compose入门3—docker compose yaml字段详解

这是一个整合了几乎所有主要字段的 Docker Compose 示例文件,包括服务定义、卷、网络、Secrets、配置等所有你可能用到的配置项。这个文件模拟了一个 Web 服务、数据库服务、以及如何使用卷、网络、Secrets 和配置。

综合示例 docker-compose.yml

version: '3.8'  # Docker Compose 文件版本

services:
  web:
    image: nginx:alpine  # 使用 nginx:alpine 镜像
    container_name: nginx-container  # 指定容器名称
    build:  # 构建镜像选项
      context: ./web
      dockerfile: Dockerfile.custom
      args:
        APP_VERSION: "1.0"
    ports:
      - "8080:80"  # 将宿主机的 8080 端口映射到容器的 80 端口
    environment:  # 环境变量
      - NGINX_HOST=localhost
      - NGINX_PORT=80
    env_file:  # 加载环境变量文件
      - ./common.env
      - ./web.env
    volumes:  # 挂载卷
      - ./html:/usr/share/nginx/html  # 挂载本地目录
      - web-data:/data  # 使用定义的卷
    networks:  # 网络配置
      - frontend
    depends_on:  # 服务依赖
      - db
    logging:  # 日志配置
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    healthcheck:  # 健康检查
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 3
    secrets:  # 使用 Secrets
      - db_password
    configs:  # 使用配置
      - web_config
    restart: always  # 容器失败时自动重启
    extra_hosts:  # 添加额外的主机名解析
      - "somehost:162.242.195.82"
    dns:  # 自定义 DNS 服务器
      - 8.8.8.8
    dns_search:  # DNS 搜索域
      - example.com
    tty: true  # 分配一个伪终端
    stdin_open: true  # 保持 STDIN 打开

  db:
    image: postgres:13  # 使用 postgres:13 镜像
    container_name: postgres-container
    environment:  # 数据库相关环境变量
      POSTGRES_DB: mydatabase
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:  # 数据库卷挂载
      - db-data:/var/lib/postgresql/data
    networks:  # 网络
      - backend
    secrets:  # 使用 Secrets
      - db_password
    restart: always

volumes:  # 定义卷
  web-data:  # Web 服务的数据卷
    driver: local
  db-data:  # 数据库的数据卷
    driver: local
    driver_opts:
      o: "uid=1000,gid=1000"
      type: "nfs"

networks:  # 定义网络
  frontend:
    driver: bridge
  backend:
    driver: bridge
    ipam:
      config:
        - subnet: 172.16.238.0/24
          gateway: 172.16.238.1

secrets:  # 定义 Secrets
  db_password:
    file: ./secrets/db_password.txt  # 从文件加载密码

configs:  # 定义配置
  web_config:
    file: ./config/nginx.conf  # 加载 Nginx 配置文件

文件结构解析

  1. version:指定 Docker Compose 文件版本。

  2. services:定义了两个服务:

    • web 服务:基于 Nginx,暴露 8080 端口,使用 build 构建镜像,挂载卷、使用环境变量文件、依赖 db 服务,并配置健康检查、日志、Secrets 和配置。
    • db 服务:基于 Postgres,使用环境变量指定数据库配置,挂载卷并使用 Secrets。
  3. volumes:定义了两个卷:

    • web-data:用于 Web 服务的数据存储。
    • db-data:用于数据库的数据持久化,并配置了自定义的驱动选项。
  4. networks:定义了两个网络:

    • frontend:前端网络,使用默认桥接驱动。
    • backend:后端网络,配置了 IP 地址分配和网关。
  5. secrets:定义了数据库的密码,以文件形式存储。

  6. configs:为 Web 服务提供 Nginx 的配置文件。


这个文件展示了 Docker Compose 中几乎所有可能用到的字段,是一个集成了服务构建、网络配置、卷挂载、Secrets、配置、日志、健康检查等功能的完整示例。你可以根据自己的应用需求,灵活修改和定制这些字段。

上一篇:APP自动化搭建与应用


下一篇:QD1-P2 HBuilderX编辑器