什么是docker-compose,和Dockerfile的区别

docker-compose 是 Docker 官方提供的一个用于定义和运行多容器 Docker 应用的工具。它通过一个简单的 YAML 配置文件(通常命名为 docker-compose.yml),可以一键启动、停止和管理多个相关联的容器,极大简化了多容器应用的开发和部署流程。

核心功能

  1. 多容器编排
    用一个配置文件定义多个容器(服务)及其依赖关系,例如 Web 应用、数据库、缓存等。

  2. 自动化流程
    自动创建容器、网络、卷,并设置容器间的通信。

  3. 环境一致性
    确保开发、测试、生产环境的一致性,避免“在我机器上能跑”的问题。

核心概念

1. docker-compose.yml 文件
  • 用 YAML 格式定义多容器的配置,包括服务、网络、卷等。

  • 示例:

    version: '3.8'  # 指定 Compose 版本
    services:
      web:          # 服务名称
        build: .    # 使用当前目录的 Dockerfile 构建镜像
        ports:
          - "5000:5000"  # 端口映射
        depends_on: # 依赖关系
          - redis
      redis:        # 另一个服务
        image: redis:alpine
        volumes:
          - redis-data:/data  # 挂载卷
    volumes:
      redis-data:  # 定义卷

2. 服务(Service)
  • 每个服务对应一个容器,可以指定:

    • 镜像(image 或 build

    • 端口映射(ports

    • 环境变量(environment

    • 数据卷(volumes

    • 依赖关系(depends_on

3. 常用命令

# 启动所有服务(后台运行)
docker-compose up -d

# 停止并删除所有容器、网络
docker-compose down

# 查看运行状态
docker-compose ps

# 构建或重新构建服务镜像
docker-compose build

# 查看服务日志
docker-compose logs

适用场景

  1. 开发环境
    快速启动本地开发所需的所有依赖(如数据库、消息队列)。

  2. 微服务架构
    管理多个相互依赖的微服务容器。

  3. CI/CD 流水线
    在自动化测试中快速搭建临时环境。

  4. 单机部署
    简化小型项目的部署流程。

Docker Compose vs. Dockerfile

Dockerfile Docker Compose
定义单个容器的构建步骤 定义多容器的编排和运行方式
通过 docker build 生成镜像 通过 docker-compose up 启动服务
适用于单一服务 适用于多服务协作的应用

进阶用法

  1. 多环境配置
    使用多个 Compose 文件(如 docker-compose.prod.yml)覆盖不同环境的配置。

  2. 变量替换
    在 YAML 文件中使用环境变量(${VARIABLE}),实现配置动态化。

  3. 扩展服务
    通过 docker-compose scale 扩展服务实例数量(需结合 Swarm 模式)。