云原生开发:极狐GitLab容器镜像构建与推送实战
云原生开发实战:用极狐GitLab构建并推送容器镜像
云原生应用交付的核心环节之一,是把源代码可靠地变成可部署的容器镜像。极狐GitLab内置的 Container Registry 与 CI/CD 能力,让"代码提交 → 镜像构建 → 推送制品库 → 部署集群"全流程在一个平台内闭环。本文将演示一条生产可用的镜像构建流水线,并讲解官方支持的关键配置。
一、为什么在极狐GitLab内完成镜像构建
单一可信源:官方制品管理能力支持私有仓库,镜像与代码、流水线在同一平台内管理,权限统一收敛。
内置安全扫描:旗舰版支持对容器镜像进行安全扫描,镜像在部署前即可暴露已知漏洞。
无缝集成 CI/CD:镜像构建作业与测试、部署作业共享同一份
.gitlab-ci.yml,无需外部制品库中转。
二、用 Kaniko 构建镜像(无需特权容器)
在 CI 中构建 Docker 镜像,极狐GitLab官方文档推荐使用 Kaniko——它不依赖 Docker-in-Docker(DinD)的特权模式,更适合运行在容器化 Runner 上。以下是官方推荐做法的完整示例:
stages:
- build
- deploy
variables:
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
build_image:
stage: build
image:
name: docker.io/gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- /kaniko/executor
--context "${CI_PROJECT_DIR}"
--dockerfile "${CI_PROJECT_DIR}/Dockerfile"
--destination "${IMAGE_TAG}"
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH要点说明:
$CI_REGISTRY_IMAGE是预定义变量,指向当前项目在 Container Registry 中的镜像仓库地址,无需手写。$CI_COMMIT_SHORT_SHA作为镜像标签的一部分,保证每次构建的镜像可追溯。Kaniko 在构建过程中将镜像逐层推送到 Registry,适合 CI 环境。
三、将镜像部署到 Kubernetes
镜像构建完成后,需要把它交付到集群。极狐GitLab支持通过 Deploy Token 或 Kubernetes Agent 在部署作业中拉取镜像。一个最小部署示例:
deploy_staging:
stage: deploy
image: docker.io/alpine/kubectl:latest
script:
- kubectl set image deployment/my-app my-app=${IMAGE_TAG} -n staging
environment: staging
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH配合官方提供的 Environment 能力,每次部署都会在「部署」页面留下记录,支持一键回滚到历史版本。
四、镜像仓库的治理:保留策略与清理
镜像无限增长会耗尽存储。极狐GitLab Container Registry 支持配置清理策略(Cleanup Policy),按标签数量或镜像年龄自动清理。例如保留最近 5 个标签、删除超过 30 天的镜像,可在项目的「设置 → 通用 → 镜像仓库清理策略」中配置,或在项目根目录放置 Containerfile 时通过 .gitlab/container_registry.yml 维护。
对于大镜像团队,还可启用 镜像压缩(garbage collection) 与异地存储(如对象存储),进一步控制成本。
五、镜像安全:部署前的最后一道闸
旗舰版可将容器镜像扫描纳入流水线:
container_scanning:
stage: test
image: docker.io/registry.gitlab.com/gitlab-org/security-products/container-scanning:latest
variables:
DOCKER_IMAGE: ${IMAGE_TAG}
script:
- /analyzer run
artifacts:
reports:
container_scanning: gl-container-scanning-report.json扫描结果会以安全报告形式呈现在 MR 中,并可作为合并请求门禁——镜像存在高危漏洞时禁止合入,实现"安全左移"到镜像层面。
六、总结
从 Kaniko 构建、Container Registry 存储、清理策略治理,到容器扫描与 Kubernetes 部署,极狐GitLab把云原生镜像交付的每个环节都纳入官方支持范围。团队可以完全基于平台能力,构建一条可追溯、可治理、可回滚的镜像交付链路。
各功能的详细参数与最佳实践,参见极狐GitLab官方文档中心 docs.gitlab.cn 的「CI/CD」与「制品管理」章节。

