一、模板完整结构概览

networks:
  net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: ${NETWORKS_SUBNET:-172.18.0.0/24}
          gateway: ${NETWORKS_GATEWAY:-172.18.0.1}
    driver_opts:
      com.docker.network.bridge.name: ${NETWORKS_NAME:-default_net}

services:
  app:
    image: docker_images:tag
    container_name: docker_container_name
    hostname: docker_hostname
    command: [--your_command value]
    user: 1000:1000
    tty: true
    logging:
      driver: json-file
      options:
        max-size: 100m
    ports:
      - 80:80
    volumes:
      - your_host_path:your_container_path
    environment:
      - env_key=value
    labels:
      - com.labels.key=value
    restart: unless-stopped
    privileged: true
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    networks:
      net:
        ipv4_address: ${NETWORKS}.2
    extra_hosts:
      - example.com:1.2.3.4

二、核心模块详解

1. 自定义网络配置(关键进阶功能)

networks:
  net:
    driver: bridge  # 使用桥接模式
    ipam:           # IP地址管理
      config:
        - subnet: ${NETWORKS_SUBNET:-172.18.0.0/24}  # 支持环境变量动态配置
          gateway: ${NETWORKS_GATEWAY:-172.18.0.1}
    driver_opts:
      com.docker.network.bridge.name: ${NETWORKS_NAME:-default_net}  # 自定义网桥名称
  • 作用:隔离容器网络,避免端口冲突。
  • 环境变量技巧:通过 ${VAR:-default} 实现灵活配置(如测试/生产环境切换)。

2. 容器基础配置

services:
  app:
    image: docker_images:tag  # 必填:镜像名称:标签
    container_name: custom_name  # 显式命名容器(避免随机生成)
    hostname: docker_hostname   # 容器内主机名
    user: "1000:1000"           # 非root用户运行,提升安全性
    tty: true                   # 启用终端输出美化日志
    restart: unless-stopped      # 异常退出时自动重启
  • 安全建议user 字段避免使用 root 权限,防止容器逃逸。

3. 资源与设备控制

privileged: true  # 授予容器特权(谨慎使用!)
deploy:
  resources:
    reservations:
      devices:    # GPU透传支持
        - driver: nvidia
          count: all          # 使用全部GPU
          capabilities: [gpu]  # 指定GPU能力
  • 适用场景:AI 训练、图形渲染等 GPU 加速任务。
  • 警告privileged: true 会暴露宿主机设备,仅在可信环境启用!

4. 存储、日志与端口

volumes:
  - /host/path:/container/path  # 宿主机目录挂载
ports:
  - "80:80"  # 端口映射(主机:容器)
logging:
  driver: json-file     # 日志存储格式
  options:
    max-size: "100m"    # 单日志文件最大容量
  • 日志管理:限制日志大小避免磁盘溢出,生产环境推荐 json-filesyslog

5. 网络与 DNS 扩展

networks:
  net:
    ipv4_address: 172.18.0.2  # 静态IP(需在subnet范围内)
extra_hosts:
  - "example.com:1.2.3.4"  # 自定义hosts解析
  • 静态 IP:固定 IP 便于容器间通信(如数据库连接)。
  • extra_hosts:绕过 DNS 污染,加速域名解析。

三、部署实战示例(Nginx 服务)

services:
  nginx:
    image: nginx:1.25.4-alpine
    container_name: nginx-prod
    ports:
      - 80:80
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf  # 挂载自定义配置
    environment:
      - NGINX_CACHE_SIZE=128m
    restart: always
    networks:
      net:
        ipv4_address: 172.18.0.10

启动命令

export NETWORKS_SUBNET="10.1.0.0/24"  # 覆盖默认子网
docker compose up -d