Skip to content

Docker CI/CD 与生产实践 ​

1. 标准链路 ​

text
commit -> test -> build -> scan/SBOM/provenance -> push
       -> sign digest -> UAT by digest -> approve -> production by same digest

Build once、promote by digest;不要在 UAT 和生产分别重建。

2. 标识与测试 ​

bash
IMAGE_REPO='registry.example.internal/team/api'
GIT_SHA="$(git rev-parse HEAD)"
IMAGE_REF="${IMAGE_REPO}:git-${GIT_SHA}"

docker build --check .
docker buildx build --target test --progress=plain .

校验变量非空、Registry 在 allowlist、commit 符合发布策略;不把不可信分支名直接拼成 tag。

最终镜像还需以非 root、只读文件系统和真实健康端点做启动冒烟;失败时先保存 logs/inspect。

3. 构建发布 ​

bash
docker buildx create \
  --driver docker-container --use --bootstrap

docker buildx build \
  --pull \
  --platform linux/amd64,linux/arm64 \
  --cache-from "type=registry,ref=${IMAGE_REPO}:buildcache" \
  --cache-to "type=registry,ref=${IMAGE_REPO}:buildcache,mode=max" \
  --sbom=true \
  --provenance=mode=max \
  --tag "$IMAGE_REF" \
  --push .

docker buildx imagetools inspect "$IMAGE_REF"

私有依赖使用 --secret/--ssh,日志不输出 Secret。不可信 PR 不接触生产 token,也不写受信任共享 cache。

4. 发布记录与门禁 ​

记录 Git commit、image ref/digest、builder 版本、目标平台、测试/扫描、SBOM/provenance/signature、审批、迁移与回滚。

门禁包括:base/依赖锁定,单元、集成和冒烟测试,漏洞策略与有期限的例外,对 digest 签名,以及部署侧验证来源、签名和证明材料。

5. Registry 认证 ​

bash
printf '%s' "$REGISTRY_TOKEN" \
  | docker login registry.example.internal \
      --username "$REGISTRY_USER" \
      --password-stdin

token 短期化、按仓库/动作最小授权,作业结束清理 runner 和临时凭据。

6. 数据迁移 ​

迁移需幂等或有保护、兼容新旧应用、先备份并验证恢复、单独记录日志与退出码。Compose:

bash
docker compose run --rm api ./migrate

应用回滚不能自动撤销不可逆数据变化。

7. 发布与回滚 ​

部署清单固定:

yaml
services:
  api:
    image: registry.example.internal/team/api@sha256:REPLACE_WITH_APPROVED_DIGEST

拉取批准 digest → 新实例健康 → 冒烟 → 切流 → 观察错误/延迟/资源/业务指标。保留旧 digest 到回滚窗口结束。

8. 生产基线 ​

  • 非 root、drop ALL、no-new-privileges;
  • 只读根文件系统,明确 tmpfs/volume;
  • CPU、内存、PID、ulimit;
  • healthcheck、停止超时、restart policy;
  • 日志轮转与集中采集;
  • 最小端口与分层网络;
  • 不挂 socket,不用 privileged/host namespace;
  • 数据备份与恢复演练。

9. 验收 ​

  • [ ] commit 可追溯,test target、镜像冒烟、多平台清单通过
  • [ ] 漏洞策略通过,SBOM/provenance/signature 可验证
  • [ ] 生产使用批准 digest,运行安全基线生效
  • [ ] 迁移有备份,回滚 digest 与 runbook 可用

10. 官方参考 ​

继续阅读