后端运维压测工程: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 等私有仓库。仓库名格式通常为 <仓库地址>/<镜像名>:<标签>。

Docker 三大核心概念关系 镜像 (Image) 只读模板 · 分层存储 容器 (Container) 运行实例 · 可写层 仓库 (Repository) 存储分发 · 版本管理 工作流程 从仓库拉取镜像 → 基于镜像创建容器 → 容器运行应用 修改后提交为新镜像 → 推送至仓库实现版本管理

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 重新构建镜像
Docker Compose 多服务编排架构 外部客户端 Web 服务 端口 8080 Redis 缓存 端口 6379 app-net 桥接网络 共享网络
注意: Compose 中的 depends_on 仅控制启动顺序,不等待服务就绪。生产环境应配合健康检查(healthcheck)或等待脚本确保依赖可用。