4. Docker 与容器化:安装 Docker Desktop、Docker Compose,配置国内镜像源,常用 Docker 命令

在契约测试的 API 事务边界治理中,容器化是保证开发环境与 CI/CD 环境一致性的关键手段。Docker 为每个微服务提供轻量级、可复制的运行单元,而 Docker Compose 则用于编排多个服务(如服务提供方、消费者、消息队列、数据库)的启动顺序与网络拓扑。本节将指导你完成 Docker Desktop 的安装、国内镜像源配置、Docker Compose 的集成,并梳理契约测试场景中最常用的 Docker 命令。

4.1 安装 Docker Desktop

Docker Desktop 是面向开发者的图形化容器管理工具,内置 Docker Engine、Docker CLI、Docker Compose 以及 Kubernetes 支持。根据操作系统选择对应安装包:

操作系统 安装方式 关键注意事项
macOS (Intel/Apple Silicon) 从 Docker Hub 下载 .dmg 安装包 Apple Silicon 芯片需勾选 "Use Rosetta for x86/amd64 emulation" 以兼容部分旧镜像
Windows 10/11 (WSL2 后端) 下载 Docker Desktop Installer.exe 安装前必须启用 WSL2 并安装 Linux 内核更新包;推荐将镜像存储位置迁移至非系统盘
Linux (Ubuntu/Debian) 通过 apt 安装 docker-ce 及 docker-ce-cli Linux 下 Docker Desktop 为可选组件;生产环境通常直接安装 Docker Engine + Docker Compose 插件
契约测试环境建议: 在本地开发阶段,推荐使用 Docker Desktop 的 "资源" 设置将 CPU 核心数分配至 4 核以上、内存分配至 8 GB 以上,以同时运行 Pact Broker、多个微服务容器及数据库容器。

4.2 配置国内镜像源

由于网络原因,直接从 Docker Hub 拉取镜像可能速度缓慢或超时。配置国内镜像加速器可显著提升 docker pull 效率。以下为 Docker Desktop 的配置步骤:

  1. 打开 Docker Desktop → Settings → Docker Engine。
  2. 在 JSON 配置中添加 registry-mirrors 字段:
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "insecure-registries": [],
  "debug": false,
  "experimental": false
}
  1. 点击 "Apply & Restart" 使配置生效。
  2. 验证配置:在终端执行 docker info,查看输出中的 Registry Mirrors 列表是否包含上述地址。
注意: 国内镜像源仅同步公开镜像,私有仓库或企业级镜像仍需通过 docker login 直接连接。若使用自建 Harbor 或 Nexus 仓库,请将地址加入 insecure-registries 或配置 TLS 证书。

4.3 Docker Compose 集成

Docker Compose 允许通过一个 docker-compose.yml 文件定义多容器应用。在契约测试场景中,典型的 Compose 文件包含服务提供方、Pact Broker、数据库及消费者测试容器。以下为最小化示例:

version: '3.8'
services:
  pact-broker:
    image: pactfoundation/pact-broker:latest
    ports:
      - "9292:9292"
    environment:
      PACT_BROKER_DATABASE_ADAPTER: postgres
      PACT_BROKER_DATABASE_HOST: postgres
      PACT_BROKER_DATABASE_NAME: pact_broker
      PACT_BROKER_DATABASE_USERNAME: pact_user
      PACT_BROKER_DATABASE_PASSWORD: pact_pass
    depends_on:
      - postgres

  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: pact_broker
      POSTGRES_USER: pact_user
      POSTGRES_PASSWORD: pact_pass
    volumes:
      - pgdata:/var/lib/postgresql/data

  provider-service:
    build: ./provider
    ports:
      - "8080:8080"
    depends_on:
      - pact-broker

volumes:
  pgdata:

启动命令:docker compose up -d,停止并清理:docker compose down -v。

版本兼容性: Docker Desktop 已内置 Docker Compose V2(命令为 docker compose,无横杠)。若使用旧版 V1,请通过 pip install docker-compose 单独安装,但建议尽快迁移至 V2。

4.4 常用 Docker 命令(契约测试场景)

以下命令按使用频率排序,覆盖镜像管理、容器生命周期、网络调试及日志查看:

命令 用途 契约测试典型用法
docker pull <image> 拉取镜像 拉取 Pact Broker、PostgreSQL、Redis 等基础镜像
docker build -t <tag> . 构建镜像 为服务提供方或消费者构建包含契约测试依赖的镜像
docker compose up -d 启动所有服务 一键启动 Pact Broker + 数据库 + 微服务
docker compose logs -f <service> 跟踪服务日志 查看提供方服务启动日志,确认契约验证是否通过
docker exec -it <container> sh 进入容器 Shell 调试容器内网络连通性:curl http://provider:8080/health
docker network ls 查看网络列表 确认 Compose 创建的默认网络名称,用于跨容器通信
docker system prune -a 清理未使用的镜像/容器/卷 释放磁盘空间,避免旧镜像干扰契约测试结果

4.5 容器化开发环境拓扑

下图展示了契约测试在 Docker 环境中的典型部署结构:开发者在本地通过 Docker Compose 启动 Pact Broker、PostgreSQL 数据库、服务提供方实例以及消费者测试容器,所有服务通过自定义网络通信,实现隔离且可复现的测试环境。

契约测试容器化开发环境拓扑 Docker Host (Docker Desktop) Docker Compose Pact Broker PostgreSQL Provider Service Consumer Test 自定义网络 (pact_network) Provider → Broker: 发布契约 Consumer → Broker: 验证契约 Consumer → Provider: API 调用

4.6 开发环境验证清单

完成上述配置后,建议执行以下验证步骤,确保容器化环境满足契约测试要求:

  • 镜像拉取测试: docker pull pactfoundation/pact-broker:latest 应在 30 秒内完成。
  • Compose 启动测试: 在项目根目录执行 docker compose up -d,所有服务状态应为 Up(docker compose ps 查看)。
  • 网络连通性测试: 进入消费者测试容器,执行 curl -I http://provider-service:8080/health,应返回 HTTP 200。
  • Pact Broker 访问测试: 浏览器打开 http://localhost:9292,应显示 Pact Broker 的 Web UI。
  • 磁盘清理确认: docker system df 查看镜像、容器、卷的占用空间,确保无冗余数据。
进阶建议: 在团队中统一使用 .env 文件管理 Docker Compose 的环境变量(如镜像版本号、数据库密码),避免硬编码。同时将 docker-compose.yml 纳入 Git 版本管理,确保所有开发者使用一致的容器化环境。