Docker Compose 核心字段解析

#新星杯·14天创作挑战营·第11期#

Docker系列文章



前言

本文将介绍Docker Compose的常用命令和配置文件解析。


一、基础结构

version: "3.8"  # 指定 Compose 文件格式版本(最新规范已移除 version 字段)
services:       # 定义所有服务(容器)
  web:          # 服务名称(自定义)
    image: nginx:alpine  # 使用的镜像
    ports:
      - "8001:80"          # 端口映射
networks:       # 定义网络
volumes:        # 定义数据卷

二、services 核心字段

2.1 镜像与构建

2.1.1 指定容器使用的镜像

image: redis:6.2-alpine

2.1.2 通过 Dockerfile 构建镜像

build:
  context: .            # Dockerfile 所在目录
  dockerfile: Dockerfile-dev  # 指定 Dockerfile 文件名
  args:                 # 构建参数
    NODE_ENV: production

2.2 端口与网络

2.2.1 端口映射

ports:
  - "8080:80"     # TCP
  - "3306:3306/tcp"  # 显式指定协议

2.2.2 暴露端口

expose:
  - "3000"

2.2.3 自定义网络

networks:
  - frontend
  - backend

2.3 数据卷

2.3.1 挂载数据卷或目录

volumes:
  - db_data:/var/lib/mysql   # 命名卷
  - ./config:/app/config      # 绑定挂载
  - /etc/localtime:/etc/localtime:ro  # 只读挂载

2.4 环境变量

2.4.1 设置环境变量

environment:
  MINIO_ROOT_USER: admin
  MYSQL_ROOT_PASSWORD: password
  TZ: Asia/Shanghai

2.4.2 从文件加载环境变量

env_file:
  - .env        # 默认读取 .env 文件
  - db.env      # 自定义文件

2.5 依赖与启动顺序

2.5.1 定义服务依赖

depends_on:
  - redis
  - mysql

2.5.2 容器重启

restart: always  # 可选值:no, always, on-failure, unless-stopped

2.6 资源限制

2.6.1 限制 CPU 和内存

deploy:          # 仅在 SwarmCompose v3+ 生效
  resources:
    limits:
      cpus: "0.5"
      memory: 512M
    reservations:
      memory: 256M

三、networks 网络配置

networks:
  frontend:                # 自定义网络名称
    driver: bridge         # 驱动类型(bridge, overlay 等)
    ipam:                  # IP 地址管理
      config:
        - subnet: 172.16.238.0/24
  backend:
    external: true         # 使用外部已存在的网络

四、volumes 数据卷配置

volumes:
  db_data:                 # 命名卷名称
    driver: local          # 存储驱动
    driver_opts:
      type: nfs
      o: addr=192.168.1.1,rw

五、其他实用字段

5.1 覆盖容器启动命令

command: ["npm", "start"]

5.2 定义健康检查

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 30s
  timeout: 10s
  retries: 3

5.3 添加元数据

labels:
  com.example.description: "Web Server"

六、docker-compose.yml


version: '2.1'
services:

  app:
    build: ./ 
    container_name: mis-api-test
    ports:
      - 7700:7700
    depends_on:
      - mysql
      - redis
      - mongo
      - minio
      
  mysql:
    image: mysql:8.0.20
    container_name: mis-mysql
    ports:
      - 7001:3306
    environment: 
      MYSQL_ROOT_PASSWORD: abc123456
    volumes:
      - /root/finance/mysql-test/data:/var/lib/mysql 
      - /root/finance/mysql-test/conf:/etc/mysql/conf.d
      - /root/finance/mysql-test/logs:/etc/log/mysql

  redis:
    image: redis:6.0.10
    container_name: mis-redis
    ports:
      - 7002:6379
    volumes:
      - /root/finance/redis-test/conf:/usr/local/etc/redis
    command: redis-server /usr/local/etc/redis/redis.conf

  mongo:
    image: mongo:4.4.7
    container_name: mis-mongo
    ports:
      - 7003:27017
    volumes:
      - /root/finance/mongo-test/mongod.conf:/etc/mongo/mongod.conf 
      - /root/finance/mongo-test/data/db:/data/db
      - /root/finance/mongo-test/data/db:/var/log/mongodb
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: abc123456
    command: --config /etc/mongo/mongod.conf

  minio:
    image: bitnami/minio:latest
    container_name: mis-minio
    ports:
      - 7004:9001
      - 7005:9000
    volumes:
      - /root/finance/minio-test/data:/bitnami/minio/data
    environment:
      - MINIO_ROOT_USER=root
      - MINIO_ROOT_PASSWORD=abc123456
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值