在本文中,我将向您展示如何在 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

进入全屏模式 退出全屏模式

工作结构

如果我们正确配置了所有内容,构建将运行:

[running-build.png](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)

完成后,一个镜像将被添加到容器注册表中:

[registry.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调用其他文件。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐