Docker Compose 多容器编排工具

laoluo
laoluo
laoluo
管理员
118
文章
0
粉丝
产品评论12阅读模式

什么是 Docker Compose?

一、核心定义

Docker Compose 是 Docker 官方推出的多容器编排工具,用来一次性管理一组关联的容器服务。

简单说:

  • 单独 docker run 只能启动单个容器
  • Compose 通过一个配置文件(docker-compose.yml)定义多个容器、网络、数据卷、依赖关系,一条命令就能批量创建 / 启动 / 停止整套服务。

适用场景:本地开发、测试、小型单机部署(不适合集群大规模生产,集群用 Kubernetes)。

二、核心作用

  1. 统一配置管理 所有服务参数(镜像、端口、环境变量、挂载目录、依赖)写在 docker-compose.yml,不用记一长串 docker run 参数。
  2. 一键启停整套服务 比如前端 + 后端 + MySQL + Redis,一条命令全部启动、停止、重启。
  3. 自动处理容器依赖 通过 depends_on 指定启动顺序(先启动数据库,再启动应用)。
  4. 内置网络互通 Compose 会自动创建专属网桥,同一项目下容器可直接用服务名互相访问,不用手动配置 IP。
  5. 统一数据卷、环境变量管理 支持 .env 文件批量管理环境变量,统一持久化存储配置。

三、核心文件:docker-compose.yml

标准 YAML 格式,基础结构:

# 版本(新版 Compose 可省略 version)
version: "3.8"

# 定义所有服务(容器)
services:
  # MySQL 服务,服务名 mysql
  mysql:
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - mysql_data:/var/lib/mysql
    restart: always

  # 后端应用,依赖 mysql
  app:
    image: my-backend:latest
    ports:
      - "8080:8080"
    depends_on:
      - mysql  # 等待 mysql 容器先启动
    env_file: .env

# 数据卷,持久化数据库数据
volumes:
  mysql_data:

四、常用基础命令

# 1. 根据yml创建并启动所有容器(后台运行)
docker-compose up -d

# 2. 查看运行容器
docker-compose ps

# 3. 查看实时日志
docker-compose logs -f

# 4. 停止服务,不删除容器/数据卷
docker-compose stop

# 5. 停止并删除容器、网络(保留数据卷)
docker-compose down

# 6. 停止并删除容器、网络、数据卷
docker-compose down -v

# 7. 重启指定服务
docker-compose restart app

# 8. 构建自定义镜像并启动
docker-compose up -d --build

五、Docker Compose V1 / V2 区别

  1. V1:独立二进制 docker-compose(横杠分隔),需要单独安装;
  2. V2:整合进 Docker 主命令 docker compose(空格分隔),新版 Docker Desktop / Docker Engine 自带,无需额外安装,功能完全兼容并增强。

现在推荐使用:docker compose(无横杠)。

六、适用与不适用场景

✅ 适合

  • 本地开发环境(项目多服务一键搭建)
  • 单机小型服务部署(博客、后台、测试环境)
  • CI/CD 测试流水线快速拉起整套环境

❌ 不适合

  • 多服务器集群、大规模生产负载均衡、弹性扩缩容 这类场景使用 Kubernetes(K8s)

七、一句话总结

Docker Compose = 单机多容器一键编排工具,用 yaml 文件描述整套微服务,简化多容器项目的部署与运维,是开发调试最常用的 Docker 配套工具。

 
laoluo
  • 本文由 laoluo 发表于2026年6月23日 17:09:46
  • 转载请务必保留本文链接:https://www.mydata-api.com/product/230.html
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证