后端运维压测工程:Docker编排下契约测试与数据传输 - 第1节
1.1 Docker 核心概念:镜像、容器、仓库
Docker 的三大核心概念构成了容器化编排的基石。理解镜像、容器与仓库之间的关系,是掌握后续契约测试与数据传输的前提。
核心关系速记: 镜像(只读模板)→ 容器(运行实例)→ 仓库(分发中心)。镜像不可变,容器可变,仓库负责版本管理与共享。
1.1.1 镜像(Image)
镜像是轻量级、可执行的独立软件包,包含运行某软件所需的所有内容:代码、运行时、系统工具、系统库和设置。镜像是分层的,每一层代表 Dockerfile 中的一条指令。
- 只读性:镜像构建完成后不可修改,任何变更都会生成新层。
- 分层结构:联合文件系统(UnionFS)将多层叠加,复用已有层可大幅节省存储。
- 唯一标识:通过镜像 ID(SHA256 摘要)或仓库名:标签(如
nginx:1.25)引用。
1.1.2 容器(Container)
容器是镜像的运行实例。它在镜像只读层之上添加一个可写层,进程隔离运行。容器可以被启动、停止、删除、暂停,且生命周期独立于镜像。
| 特性 | 镜像 | 容器 |
|---|---|---|
| 状态 | 静态(只读模板) | 动态(运行/停止/暂停) |
| 可写性 | 不可写 | 可写(临时层) |
| 生命周期 | 持久存在 | 按需创建/销毁 |
| 用途 | 分发与版本控制 | 运行应用与微服务 |
1.1.3 仓库(Repository)
仓库用于存储和分发镜像。Docker Hub 是默认公共仓库,企业常用 Harbor、AWS ECR 等私有仓库。仓库名格式通常为 <仓库地址>/<镜像名>:<标签>。
1.2 Dockerfile 编写规范
Dockerfile 是自动化构建镜像的脚本。规范编写直接影响镜像体积、构建速度和安全性。以下为生产级 Dockerfile 的核心原则与示例。
1.2.1 指令顺序与缓存利用
Docker 构建时逐条执行指令并缓存层。将变化频率低的指令放在前面(如安装系统包),变化频繁的放在后面(如复制源码),可最大化缓存命中。
| 推荐顺序 | 指令示例 | 变化频率 |
|---|---|---|
| 1 | FROM |
极低(基础镜像固定) |
| 2 | RUN apt-get update && apt-get install -y |
低(依赖稳定) |
| 3 | COPY requirements.txt |
中(依赖变更) |
| 4 | RUN pip install -r requirements.txt |
中 |
| 5 | COPY . /app |
高(源码频繁修改) |
| 6 | CMD ["python", "app.py"] |
低 |
1.2.2 多阶段构建
多阶段构建允许在一个 Dockerfile 中使用多个 FROM 语句,最终只将必要产物复制到最终镜像,大幅减小体积。
# 第一阶段:编译环境
FROM golang:1.21 AS builder
WORKDIR /src
COPY . .
RUN go build -o /app/server
# 第二阶段:运行环境
FROM alpine:3.19
RUN apk add --no-cache ca-certificates
COPY --from=builder /app/server /server
EXPOSE 8080
CMD ["/server"]
最佳实践: 使用
.dockerignore 排除本地无关文件(如 node_modules、.git),避免上下文过大导致构建缓慢。
1.3 Docker Compose 入门
Docker Compose 通过 YAML 文件定义和运行多容器应用。在微服务架构中,Compose 是本地开发与 CI 环境编排的首选工具。
1.3.1 docker-compose.yml 核心结构
一个典型的 Compose 文件包含 services、networks、volumes 三大顶级字段。以下为 Web 应用 + Redis 缓存的示例:
version: '3.8'
services:
web:
build: .
ports:
- "8080:8080"
depends_on:
- redis
environment:
- REDIS_HOST=redis
networks:
- app-net
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
networks:
- app-net
volumes:
redis-data:
networks:
app-net:
driver: bridge
1.3.2 常用命令速查
| 命令 | 作用 |
|---|---|
docker compose up -d |
后台启动所有服务 |
docker compose down |
停止并移除容器、网络 |
docker compose logs -f |
实时查看所有服务日志 |
docker compose exec web sh |
进入 web 容器执行命令 |
docker compose build |
重新构建镜像 |
注意: Compose 中的
depends_on 仅控制启动顺序,不等待服务就绪。生产环境应配合健康检查(healthcheck)或等待脚本确保依赖可用。