跳至正文
老丹的足迹 —— 代码写给机器,游记写给自己,感悟写给时间
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面

Docker Compose 完全指南:从入门到精通

版本说明:本文基于 Docker Compose V2(当前最新版本,2026年)

目录

  • 一、什么是 Docker Compose?
  • 二、当前版本说明:V2 与 V1 的区别
  • 三、安装与环境准备
  • 四、Compose 文件格式:Compose 规范
  • 五、配置详解
  • 5.1 name – 项目名称
  • 5.2 services – 服务定义
  • 5.3 networks – 网络配置
  • 5.4 volumes – 数据卷配置
  • 5.5 configs 和 secrets
  • 六、完整配置示例
  • 七、常用命令大全
  • 八、最佳实践与技巧
  • 九、常见问题与解决方案

一、什么是 Docker Compose?

1.1 核心概念

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 配置文件(compose.yaml),你可以配置应用程序所需的所有服务(容器)、网络和存储卷,然后用一条命令创建并启动所有服务。

1.2 解决的问题

在没有 Compose 之前,启动一个由多个容器组成的应用(如 Web 服务器、后端 API、数据库、缓存)需要:

docker run -d --name redis redis:alpine
docker run -d --name db -e MYSQL_ROOT_PASSWORD=secret mysql:8.0
docker run -d --name app -p 8080:8080 --link db --link redis myapp:latest

手动管理这些命令不仅繁琐,还容易出错,且难以共享和复现环境。

有了 Compose,你只需要一个配置文件:

services:
  app:
    image: myapp:latest
    ports:
      - "8080:8080"
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secret
  redis:
    image: redis:alpine

然后一条命令搞定一切:

docker compose up -d

1.3 核心优势

优势说明
环境标准化配置文件即文档,团队成员使用相同的配置确保开发、测试、生产环境一致
开发效率一条命令启动整个应用栈,无需记忆复杂的 docker run 参数
可移植性配置文件可以轻松在不同的机器和环境中复用
服务隔离每个应用运行在自己的网络环境中,互不干扰
生命周期管理统一的命令管理所有服务的启动、停止、重启、日志查看等操作

二、当前版本说明:V2 与 V1 的区别

2.1 版本历史

版本状态说明
Compose V1已弃用2023年7月停止更新,命令格式为 docker-compose(带连字符)
Compose V2当前版本作为 Docker CLI 插件集成,命令格式为 docker compose(空格分隔)

2.2 V1 与 V2 详细对比

对比项V1(旧版)V2(当前版本)
命令格式docker-composedocker compose
实现语言PythonGo
集成方式独立二进制文件Docker CLI 内置插件
启动速度相对较慢显著提升(Go 语言性能优势)
BuildKit 支持需手动启用默认启用,构建更快
version 字段必需(如 version: '3.8')已弃用,建议省略
文件命名docker-compose.yml推荐 compose.yaml(两者都支持)
容器命名规则项目_服务_序号(使用下划线)项目-服务-序号(使用连字符)

2.3 如何确认你的版本

# 查看 Compose 版本
docker compose version

# 输出示例
Docker Compose version v2.27.0-desktop.1

⚠️ 重要提示:如果你还在使用 V1 命令 docker-compose,建议尽快迁移到 V2。V1 不再接收安全更新和功能更新。

三、安装与环境准备

3.1 安装 Docker Compose

如果你安装了 Docker Desktop(Windows / macOS)或 Docker Engine 23.0+(Linux),Compose V2 已经默认内置,无需单独安装。

# 验证安装
docker compose version

# 预期输出类似
Docker Compose version v2.27.0

3.2 Linux 系统单独安装(如需)

如果系统较旧,Docker Engine 版本低于 23.0,可以手动安装 Compose 插件:

# 下载最新版本
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose

# 添加执行权限
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

# 验证安装
docker compose version

3.3 准备项目目录

建议每个 Compose 项目使用独立的目录:

myapp/
├── compose.yaml          # Compose 配置文件
├── .env                  # 环境变量文件(可选)
├── app/                  # 应用代码目录
│   ├── Dockerfile
│   └── src/
└── data/                 # 持久化数据目录(可选)

四、Compose 文件格式:Compose 规范

4.1 什么是 Compose 规范?

Compose 规范(Compose Specification)是 Docker Compose 文件格式的官方技术标准。它详细规定了如何用 YAML 语言定义一个多容器应用。

4.2 重要变化:version 字段已弃用

这是当前版本最重要的变化!

过去,Compose 文件必须包含 version 字段:

# 旧写法(虽然还能用,但不推荐)
version: '3.8'
services:
  web:
    image: nginx

现在,version 字段已被弃用,直接以 services 开头即可:

# 新写法(推荐)
services:
  web:
    image: nginx

规范已将所有旧版本(2.x 和 3.x)的功能合并统一,成为一个滚动更新的标准。如果文件中存在 version 字段,Compose V2 会忽略它并按最新规范解析。

4.3 文件命名优先级

推荐使用 compose.yaml,但也兼容 docker-compose.yml:

文件名优先级说明
compose.yaml最高官方推荐的默认文件名
compose.yml次高.yml 扩展名变体
docker-compose.yaml较低向后兼容 V1 命名
docker-compose.yml最低向后兼容 V1 命名

4.4 文件基本结构

一个完整的 Compose 文件包含以下5 个顶级元素(仅 services 是必需的):

# 可选:项目名称
name: myapp

# 必需:服务定义
services:
  # 服务配置...

# 可选:网络定义
networks:
  # 网络配置...

# 可选:数据卷定义
volumes:
  # 数据卷配置...

# 可选:配置文件定义
configs:
  # 配置文件...

# 可选:敏感信息定义
secrets:
  # 密钥配置...

4.5 YAML 语法要点

Compose 文件使用 YAML 格式编写,需注意:

规则说明正确 ✅错误 ❌
缩进使用空格,不能用 Tabport: 80port: 80
缩进量建议 2 个空格一级services:
web:
services:
web:
键值对冒号后加空格image: nginximage:nginx
列表使用 - 加空格ports:
- "80:80"
ports: ["80:80"]
字符串一般无需引号,含特殊字符时需要command: npm start–
布尔值true/false、yes/no、on/offrestart: always–

五、配置详解

5.1 name – 项目名称

name 定义项目的名称,会影响容器、网络、数据卷的命名前缀。

name: myapp

services:
  web:
    image: nginx
  • 默认值:当前目录名
  • 命名格式:${name}_${service}_${replica} → 如 myapp_web_1
  • 环境变量覆盖:可通过 COMPOSE_PROJECT_NAME 环境变量覆盖

5.2 services – 服务定义

services 是 Compose 文件的核心,每个服务对应一个容器。

5.2.1 基础配置

配置项类型说明示例
imagestring指定使用的镜像image: nginx:alpine
container_namestring自定义容器名(固定后无法扩容)container_name: my-nginx
buildstring / object从 Dockerfile 构建镜像build: ./app
commandstring / list覆盖镜像的默认 CMDcommand: npm start
entrypointstring / list覆盖镜像的默认 ENTRYPOINTentrypoint: ["/app/entry.sh"]
working_dirstring设置容器内工作目录working_dir: /app
userstring运行进程的用户 IDuser: "1000:1000"
hostnamestring容器主机名hostname: my-host
restartstring重启策略restart: always

重启策略详解:

值说明
no不自动重启(默认)
always无论退出码如何,总是重启
on-failure仅当退出码非 0 时重启
unless-stopped除非手动停止,否则总是重启

5.2.2 端口与网络

配置项类型说明示例
portslist端口映射 宿主机:容器ports: - "80:80"
exposelist暴露端口给同网络服务expose: - "5432"
networkslist连接到的网络networks: - frontend
network_modestring网络模式network_mode: host
dnslistDNS 服务器dns: - 8.8.8.8
extra_hostslist添加 hosts 映射extra_hosts: - "host:10.0.0.1"

端口映射格式:

ports:
  # 宿主机端口:容器端口
  - "80:80"

  # 指定协议
  - "8080:8080/udp"

  # 随机宿主机端口
  - "9000"

  # 仅绑定到指定 IP
  - "127.0.0.1:8080:8080"

  # 短语法(不推荐)
  - 8080:8080

5.2.3 存储配置

配置项类型说明示例
volumeslist挂载数据卷或主机目录volumes: - db_data:/var/lib/mysql
tmpfsstring / list临时文件系统(内存)tmpfs: /tmp

Volume 挂载格式:

volumes:
  # 命名卷(需在顶层 volumes 声明)
  - db-data:/var/lib/mysql

  # 主机目录(绝对路径)
  - /opt/data:/app/data

  # 主机目录(相对路径)
  - ./config:/app/config:ro  # ro 表示只读

  # 语法详解
  - [SOURCE]:[TARGET]:[OPTIONS]

5.2.4 环境变量

配置项类型说明示例
environmentmap / list直接设置环境变量environment: {KEY: value}
env_filelist从文件加载环境变量env_file: - .env

environment 示例:

# Map 格式(推荐)
environment:
  NODE_ENV: production
  PORT: 8080

# 列表格式
environment:
  - NODE_ENV=production
  - PORT=8080

env_file 示例:

env_file:
  - .env              # 基础环境变量
  - .env.production   # 生产环境覆盖

.env 文件格式:

# 注释
DATABASE_URL=postgresql://user:pass@db:5432/app
API_KEY=abc123
NODE_ENV=development

5.2.5 依赖关系与健康检查

配置项类型说明示例
depends_onlist / object服务依赖(控制启动顺序)depends_on: - db
healthcheckobject健康检查配置healthcheck: {test: ["CMD", "curl", "localhost"]}

depends_on 详解:

services:
  app:
    image: myapp
    depends_on:
      db:
        condition: service_healthy  # 等待 db 健康后再启动
      redis:
        condition: service_started  # 默认值,仅等待启动

  db:
    image: postgres
    healthcheck:
      test: ["CMD", "pg_isready"]

  redis:
    image: redis

健康检查配置:

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost/health"]  # 检查命令
  interval: 30s       # 检查间隔
  timeout: 10s        # 超时时间
  retries: 3          # 失败重试次数
  start_period: 40s   # 启动预热时间

5.2.6 资源限制

配置项类型说明示例
cpusstringCPU 限制(核心数)cpus: '0.5'
cpu_sharesintCPU 相对权重cpu_shares: 512
mem_limitstring内存限制mem_limit: 512m
mem_reservationstring内存预留mem_reservation: 256m
deploy.resourcesobjectSwarm 模式资源限制deploy.resources.limits.memory: 512M

示例:

services:
  app:
    image: myapp
    cpus: '1.5'           # 限制使用 1.5 个 CPU 核心
    mem_limit: 1g         # 限制内存 1 GB
    mem_reservation: 512m # 预留 512 MB

5.2.7 日志配置

配置项类型说明示例
logging.driverstring日志驱动driver: json-file
logging.optionsmap日志驱动选项options: {max-size: "10m"}

示例:

services:
  app:
    image: myapp
    logging:
      driver: json-file
      options:
        max-size: "10m"    # 单个日志文件最大 10MB
        max-file: "3"      # 保留 3 个文件

5.2.8 安全与权限

配置项类型说明示例
cap_addlist添加 Linux Capabilitiescap_add: - NET_ADMIN
cap_droplist删除 Linux Capabilitiescap_drop: - ALL
privilegedbool特权模式(谨慎使用)privileged: true
read_onlybool只读根文件系统read_only: true

5.2.9 容器生命周期

配置项类型说明示例
initbool使用 init 进程管理僵尸进程init: true
stop_grace_periodduration优雅停止等待时间stop_grace_period: 30s
stop_signalstring停止信号stop_signal: SIGTERM

5.3 networks – 网络配置

默认情况下,Compose 会创建一个默认网络(default),所有服务都连接到这个网络,可以通过服务名互相访问。

5.3.1 基本配置

networks:
  frontend:
    driver: bridge        # 网络驱动
    driver_opts:          # 驱动选项
      com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"
    ipam:                 # IP 地址管理
      config:
        - subnet: 172.16.1.0/24
    internal: true        # 是否内部网络(无外网访问)
    attachable: true      # 是否允许独立容器连接

5.3.2 网络驱动类型

驱动说明适用场景
bridge默认驱动,创建隔离网络单机开发环境
host直接使用宿主机网络栈性能要求高,端口冲突风险
overlay跨主机网络Swarm 集群模式
none禁用网络不需要网络的服务

5.3.3 服务连接网络

services:
  web:
    image: nginx
    networks:
      - frontend
      # 指定网络别名
      - backend:
          aliases:
            - web-backend

  db:
    image: postgres
    networks:
      - backend

networks:
  frontend:
  backend:
    internal: true   # 后端网络不暴露外网

5.4 volumes – 数据卷配置

数据卷用于持久化存储数据,容器删除后数据不会丢失。

5.4.1 基本配置

volumes:
  db-data:
    driver: local
    driver_opts:
      type: none
      device: /mnt/data/db
      o: bind
    external: false    # 是否使用外部已存在的数据卷
    name: custom-db-data  # 数据卷实际名称

5.4.2 Volume 驱动

驱动说明适用场景
local默认驱动,存储在宿主机单机开发
nfsNFS 共享存储多机共享数据
cloud云存储驱动(需要插件)生产环境

5.5 configs 和 secrets

这两个配置项主要用于 Docker Swarm 模式,在单机模式下功能有限。

configs – 非敏感配置文件

configs:
  app_config:
    file: ./config/app.conf
    external: false

services:
  app:
    image: myapp
    configs:
      - source: app_config
        target: /etc/app/config.conf
        mode: 0444

secrets – 敏感信息管理

secrets:
  db_password:
    file: ./secrets/db_password.txt
    external: false

services:
  app:
    image: myapp
    secrets:
      - source: db_password
        target: /run/secrets/db_password
        mode: 0400

六、完整配置示例

6.1 基础示例:Web + 数据库 + 缓存

name: myapp

services:
  web:
    image: nginx:alpine
    container_name: myapp-nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html:ro
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    networks:
      - frontend
    depends_on:
      - api
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

  api:
    build:
      context: ./api
      dockerfile: Dockerfile
      target: production
      args:
        NODE_ENV: production
    ports:
      - "3000:3000"
    environment:
      NODE_ENV: production
      DB_HOST: db
      DB_PORT: 5432
      REDIS_HOST: redis
    env_file:
      - .env.production
    volumes:
      - uploads:/app/uploads
    networks:
      - backend
      - frontend
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 512M
        reservations:
          memory: 256M
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "node", "health.js"]
      interval: 30s
      timeout: 5s
      retries: 3
    user: "1000:1000"

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: postgres
    env_file:
      - .env.db
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./init-db:/docker-entrypoint-initdb.d:ro
    networks:
      - backend
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5
    deploy:
      resources:
        limits:
          memory: 256M

  redis:
    image: redis:7-alpine
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data
    networks:
      - backend
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge
    internal: true

volumes:
  postgres_data:
  redis_data:
  uploads:

6.2 开发环境示例

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - "3000:3000"
      - "9229:9229"  # Node.js 调试端口
    volumes:
      - .:/app
      - /app/node_modules  # 避免覆盖容器内的 node_modules
    environment:
      NODE_ENV: development
      DATABASE_URL: postgresql://postgres:secret@db:5432/dev_db
    depends_on:
      - db
      - redis
    command: npm run dev

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: dev_db
      POSTGRES_PASSWORD: secret
    ports:
      - "5432:5432"  # 暴露端口供主机连接
    volumes:
      - dev_db_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - dev_redis_data:/data

  adminer:
    image: adminer:latest
    ports:
      - "8080:8080"
    environment:
      ADMINER_DEFAULT_SERVER: db

volumes:
  dev_db_data:
  dev_redis_data:

七、常用命令大全

7.1 基本命令

命令说明示例
docker compose up启动所有服务docker compose up
docker compose up -d后台启动docker compose up -d
docker compose down停止并删除容器docker compose down
docker compose down -v同时删除数据卷docker compose down -v
docker compose stop停止服务(不删除)docker compose stop
docker compose start启动已停止的服务docker compose start
docker compose restart重启服务docker compose restart
docker compose pause暂停服务docker compose pause
docker compose unpause恢复暂停的服务docker compose unpause

7.2 构建与重建

命令说明示例
docker compose build构建或重建服务镜像docker compose build
docker compose build --no-cache不使用缓存构建docker compose build --no-cache
docker compose up --build重新构建并启动docker compose up --build
docker compose build --parallel并行构建docker compose build --parallel

7.3 日志与状态

命令说明示例
docker compose ps列出所有容器状态docker compose ps
docker compose logs查看日志docker compose logs
docker compose logs -f实时跟踪日志docker compose logs -f web
docker compose logs --tail=100显示最后100行docker compose logs --tail=100
docker compose top显示容器内进程docker compose top
docker compose port显示端口映射docker compose port web 80

7.4 执行与调试

命令说明示例
docker compose exec在运行中的容器执行命令docker compose exec web bash
docker compose run运行一次性命令(新容器)docker compose run web npm test
docker compose config验证并显示配置文件docker compose config
docker compose events监听容器事件docker compose events

7.5 扩缩容与维护

命令说明示例
docker compose up --scale扩缩容服务副本数docker compose up -d --scale web=3
docker compose rm删除停止的容器docker compose rm
docker compose pull拉取最新镜像docker compose pull
docker compose push推送构建的镜像docker compose push

7.6 配置文件指定

# 使用非默认名称的配置文件
docker compose -f docker-compose.prod.yml up

# 合并多个配置文件
docker compose -f base.yml -f dev.yml up

# 指定项目名称
docker compose -p myproject up

八、最佳实践与技巧

8.1 配置文件组织

项目目录/
├── compose.yaml           # 主配置文件
├── compose.override.yaml  # 本地覆盖配置(Git 忽略)
├── compose.prod.yaml      # 生产环境配置
└── .env                   # 环境变量文件

合并配置:

# 开发环境:合并 override
docker compose up

# 生产环境:使用特定文件
docker compose -f compose.yaml -f compose.prod.yaml up

8.2 环境变量使用

# compose.yaml
services:
  db:
    image: postgres:${POSTGRES_VERSION:-16}
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD?err}  # 必须存在
      POSTGRES_USER: ${DB_USER:-postgres}    # 带默认值

.env 文件:

# .env
POSTGRES_VERSION=16-alpine
DB_PASSWORD=secret123

8.3 构建优化

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
      cache_from:
        - myapp:latest
        - myapp:cache
      args:
        BUILDKIT_INLINE_CACHE: 1
    image: myapp:${TAG:-latest}

8.4 依赖顺序控制

services:
  app:
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    restart: on-failure

  db:
    image: postgres
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 10
    restart: on-failure

8.5 安全建议

services:
  app:
    # 以非 root 用户运行
    user: "1000:1000"

    # 只读根文件系统
    read_only: true

    # 添加临时可写目录
    tmpfs:
      - /tmp
      - /run

    # 限制能力
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE  # 仅添加必要的能力

    # 安全选项
    security_opt:
      - no-new-privileges:true

8.6 性能优化

services:
  app:
    # 资源限制
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 1G
        reservations:
          cpus: '0.5'
          memory: 256M

    # 使用更快的日志驱动
    logging:
      driver: local
      options:
        max-size: 10m
        max-file: 3

8.7 调试技巧

# 查看合并后的完整配置
docker compose config

# 仅构建特定服务
docker compose build --no-cache web

# 查看服务依赖关系
docker compose config --images
docker compose config --services

# 进入容器调试
docker compose exec web sh

# 查看容器资源使用
docker stats $(docker compose ps -q)

九、常见问题与解决方案

9.1 容器启动顺序问题

问题:依赖服务未完全就绪就启动主服务

解决方案:

services:
  app:
    depends_on:
      db:
        condition: service_healthy  # 等待健康检查通过
    restart: on-failure

  db:
    healthcheck:
      test: ["CMD", "pg_isready"]
      interval: 5s
      timeout: 5s
      retries: 10

9.2 端口冲突

问题:宿主机端口已被占用

解决方案:

services:
  web:
    ports:
      - "8080:80"   # 改为使用其他端口
      # 或使用随机端口
      - "80"        # 系统自动分配

9.3 数据持久化问题

问题:容器重启后数据丢失

解决方案:

services:
  db:
    volumes:
      - db_data:/var/lib/postgresql/data  # 使用命名卷

volumes:
  db_data:  # 声明卷,数据会持久保存

9.4 网络通信问题

问题:服务之间无法通过服务名访问

解决方案:

# 确保服务在同一网络
services:
  web:
    networks:
      - app-network
  api:
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

9.5 环境变量覆盖问题

问题:环境变量不生效或覆盖顺序混乱

解决方案:

services:
  app:
    # 优先级:environment > env_file > .env 文件
    environment:
      - NODE_ENV=production  # 最高优先级
    env_file:
      - .env.common          # 较低优先级
      - .env.override        # 后者覆盖前者

9.6 构建缓存问题

问题:Dockerfile 修改后未生效

解决方案:

# 强制重建镜像
docker compose build --no-cache

# 或指定服务重建
docker compose up -d --build web

9.7 资源不足问题

问题:容器内存或 CPU 不足

解决方案:

services:
  app:
    # 增加资源限制
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: '2'

9.8 从 V1 迁移到 V2步骤:

  1. 验证新命令可用:docker compose version
  2. 移除文件中的 version 字段(可选但推荐)
  3. 更新脚本中的命令为 docker compose
  4. 测试运行:docker compose up -d
  5. 清理旧容器:docker-compose down(如仍有旧版本)

注意:容器命名会变化,确保没有硬编码依赖旧名称。

总结

Docker Compose V2 是现代容器化应用开发的必备工具。它通过声明式的 YAML 配置,让多容器应用的部署、管理和共享变得简单可控。

核心要点回顾

要点说明
当前版本Compose V2,命令 docker compose
文件格式Compose 规范,不再需要 version 字段
核心结构services(必需)、networks、volumes
常用命令up -d、down、logs、exec
最佳实践使用健康检查、数据卷持久化、资源限制

掌握 Compose 后,你可以轻松管理复杂的微服务架构,在开发、测试、生产环境之间无缝迁移,真正实现“一次编写,到处运行”。


本文档内容基于 Docker Compose V2(2026年),如需最新信息,请参考 Docker 官方文档。

作者

老丹

关注我
其他文章
上一个

IPv4 公网地址查询服务完整实现

下一个

精准比较的艺术:GNU Diffutils 工具包完全解析

关于博主

    老丹是一名C/C++后台开发工程师,信奉“无抽象不设计,无性能不生产”。

  • 技术栈:Modern C++、Linux环境编程、多线程/并发、网络编程等。
  • 信条:能用constexpr解决的问题绝不拖到运行时,能靠RAII避免的泄漏绝不写析构。
  • 正在填坑:从解封装到渲染的C++全链路实现,正在驯服FFmpeg与H.264/H.265。
  • 输出原则:这里的每一段代码都经过-Wall -Wextra -Werror -O2的洗礼。

搜索

近期文章

  • Bash命令行参数完全指南 2026年6月17日
  • Bash 数组完全指南:从设计思想到实战应用 2026年6月16日
  • Bash 变量内容操作完全指南 2026年6月16日
  • usbutils:Linux下USB设备查看与调试的完整指南 2026年6月16日
  • MQTT协议完全指南:从核心概念到实践应用 2026年6月16日
  • ICO文件格式完全解析 2026年6月15日

文章分类

  • C/C++开发 (10)
  • Linux工具包 (6)
  • Linux服务配置 (7)
  • Shell脚本 (3)
  • 计算机理论 (9)
联系我们:📍 地址:中国·广东省深圳市   |   ✉️ 邮箱:support@tanglinux.com   |   💬 QQ:870866607
版权所有:老丹的足迹粤ICP备2026061170号-1       公安备案图标 粤公网安备44030002013274号