极狐GitLab

云原生开发:极狐GitLab容器镜像构建与推送实战

极狐GitLab
2026年8月17日
24567
分享:

云原生开发实战:用极狐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」与「制品管理」章节。