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 插件 |
4.2 配置国内镜像源
由于网络原因,直接从 Docker Hub 拉取镜像可能速度缓慢或超时。配置国内镜像加速器可显著提升 docker pull 效率。以下为 Docker Desktop 的配置步骤:
- 打开 Docker Desktop → Settings → Docker Engine。
- 在 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
}
- 点击 "Apply & Restart" 使配置生效。
- 验证配置:在终端执行
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 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 数据库、服务提供方实例以及消费者测试容器,所有服务通过自定义网络通信,实现隔离且可复现的测试环境。
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 版本管理,确保所有开发者使用一致的容器化环境。