Building images with kaniko and GitLab CI/CD
- Requirements
- Building a Docker image with kaniko
- Using a registry with a custom certificate
- Video walkthrough of a working example
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:
- 构建一个 Docker 镜像
- 然后将其推送到GitLab 容器注册表 .
仅当按下标签时作业才会运行. 使用从 GitLab CI / CD 提供的环境变量中获取的所需 GitLab 容器注册表凭据在/kaniko/.docker
下创建一个config.json
文件.
在最后一步中,kaniko 使用项目根目录下的Dockerfile
,构建 Docker 映像并将其推送到项目的 Container Registry,同时使用 Git 标签对其进行标记:
build:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
only:
- tags
Using a registry with a custom certificate
尝试推送到使用由自定义 CA 签名的证书的 Docker 注册表时,您可能会遇到以下错误:
$ /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --no-push
INFO[0000] Downloading base image registry.gitlab.example.com/group/docker-image
error building image: getting stage builder for stage 0: Get https://registry.gitlab.example.com/v2/: x509: certificate signed by unknown authority
可以通过将您的 CA 证书添加到 kaniko 证书存储区来解决:
before_script:
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- |
echo "-----BEGIN CERTIFICATE-----
...
-----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 模式的更多详细信息.