如何在 GitLab CI 中构建 Docker 镜像
在本文中,我将向您展示如何在 GitLab 中构建 Docker 镜像并将它们推送到平台提供的容器注册表中。
Docker 文件
简单文件,我在其中为节点映像设置了非 root 用户。Dockerfile
:
FROM node:16.5.0
USER node
进入全屏模式 退出全屏模式
在 Docker Hub 映像中,将它们保留在root
用户上是一个惯例。某些 npm 功能已针对 root 用户关闭,因此最好在不同的用户上运行我们的构建。
GitLab CI 文件
内部.gitlab-ci.yml
如下:
stages:
- build
进入全屏模式 退出全屏模式
定义阶段。在我们的简单示例中,我们只需要 1 个阶段就可以了。
docker-image:
stage: build
进入全屏模式 退出全屏模式
创建docker-image
作业并将其设置为build
阶段
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
进入全屏模式 退出全屏模式
用于创建图像的 Google 工具。它应该支持标准的 Dockerfiles,到目前为止,使用 5~8 个图像,我没有发现任何特定于 kaniko 的问题。有一个用于构建镜像的 Docker 镜像,但是在 Docker 内部进行设置有点麻烦。你需要配置 docker-in-docker,我发现使用 kaniko 更简单。
entrypoint: 100016 ""]
覆盖图像的入口点。我在自己设置这个东西时发现了它,事实上,如果我删除这条线 build failed
script:
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
进入全屏模式 退出全屏模式
-
mkdir -p /kaniko/.docker
- 创建一个文件夹,kaniko 从中读取访问文件 -
echo ...
- 将 GitLab 注册表访问信息放入将由 kaniko 读取的文件。笔记!这些值由 GitLab 提供,您不必自己设置凭据。
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE
进入全屏模式 退出全屏模式
我们构建文件并将图像推送到注册表。如果您想在存储库中构建多个图像,您可以将--destination $CI_REGISTRY_IMAGE
替换为--destination $CI_REGISTRY_IMAGE/image-name
- 这样您可以将多个图像放在一起。
完成配置
.gitlab-ci.yml
:
stages:
- build
docker-image:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- mkdir -p /kaniko/.docker
- 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
进入全屏模式 退出全屏模式
工作结构
如果我们正确配置了所有内容,构建将运行:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--PZzgTX_m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev -to-uploads.s3.amazonaws.com/uploads/articles/hm1a1wyrem3e8qubuza6.png)
完成后,一个镜像将被添加到容器注册表中:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--HvTxOIBx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/098v6nqpow3jlkp4wwim.png)
参考文献
在这里您可以找到示例存储库和容器注册表。
总结
在本文中,我们看到了一个如何在 GitLab 中构建图像的简单示例。如果您想构建更多图像,您可以随时添加更多/kaniko/executor
调用其他文件。
更多推荐
所有评论(0)