Building images with kaniko and GitLab CI/CD

原文:https://docs.gitlab.com/ee/ci/docker/using_kaniko.html

Building images with kaniko and GitLab CI/CD

在 GitLab 11.2 中引入 . 需要 GitLab Runner 11.2 及更高版本.

kaniko是从容器或 Kubernetes 集群内部的 Dockerfile 构建容器映像的工具.

kaniko 使用Docker-in-Docker 构建方法解决了两个问题:

  • Docker-in-Docker 需要特权模式才能运行,这是一个重大的安全问题.
  • Docker-in-Docker 通常会导致性能下降,并且可能会非常慢.

Requirements

为了在 GitLab 中使用 kaniko,需要使用以下执行程序之一的GitLab Runner

Building a Docker image with kaniko

使用 kaniko 和 GitLab CI / CD 构建映像时,应注意一些重要细节:

  • 推荐使用 kaniko 调试映像( gcr.io/kaniko-project/executor:debug ),因为它具有外壳,并且该映像与 GitLab CI / CD 一起使用时需要外壳.
  • 入口点将需要被覆盖 ,否则构建脚本将无法运行.
  • 需要使用所需容器注册表的身份验证信息创建一个 Docker config.json文件.

In the following example, kaniko is used to:

  1. 构建一个 Docker 镜像
  2. 然后将其推送到GitLab 容器注册表 .

仅当按下标签时作业才会运行. 使用从 GitLab CI / CD 提供的环境变量中获取的所需 GitLab 容器注册表凭据在/kaniko/.docker下创建一个config.json文件.

在最后一步中,kaniko 使用项目根目录下的Dockerfile ,构建 Docker 映像并将其推送到项目的 Container Registry,同时使用 Git 标签对其进行标记:

  1. build:
  2. stage: build
  3. image:
  4. name: gcr.io/kaniko-project/executor:debug
  5. entrypoint: [""]
  6. script:
  7. - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
  8. - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
  9. only:
  10. - tags

Using a registry with a custom certificate

尝试推送到使用由自定义 CA 签名的证书的 Docker 注册表时,您可能会遇到以下错误:

  1. $ /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --no-push
  2. INFO[0000] Downloading base image registry.gitlab.example.com/group/docker-image
  3. error building image: getting stage builder for stage 0: Get https://registry.gitlab.example.com/v2/: x509: certificate signed by unknown authority

可以通过将您的 CA 证书添加到 kaniko 证书存储区来解决:

  1. before_script:
  2. - mkdir -p /kaniko/.docker
  3. - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
  4. - |
  5. echo "-----BEGIN CERTIFICATE-----
  6. ...
  7. -----END CERTIFICATE-----" >> /kaniko/ssl/certs/additional-ca-cert-bundle.crt

Video walkthrough of a working example

在 GitLab视频上使用 Kaniko最低权限容器构建是对Kaniko Docker Build Guided Exploration 项目管道的演练. 经过测试:

可以将示例复制到您自己的组或实例中进行测试. 项目页面上提供了有关演示其他 GitLab CI 模式的更多详细信息.