'gitlab/gitlab-runner-helper' docker 图片有什么用?

What is 'gitlab/gitlab-runner-helper' docker image used for?

我的总体目标是安装一个自托管 gitlab-runner,限制使用我自己准备的docker图像docker 仅限注册表.

为此,我有一个 system.d 配置,如下所示:

/etc/systemd/system/docker.service.d/allow-private-registry-only.conf

BLOCK_REGISTRY='--block-registry=all'
ADD_REGISTRY='--add-registry=my.private.registry:8080'

这样,docker pull 只能从 my.private.registry/ 中提取图像。

在我设法让它工作之后,我想清理我的本地注册表并删除旧的 docker images。正是在那个过程中,我偶然发现了一个名为 gitlab/gitlab-runner-helper 的 docker 图像,它可能是 gitlab-runner 本身使用的某个组件,并且可能是从 docker.io.[= 中提取的。 22=]

现在我想知道在使用 gitlab-runner 时是否甚至 possible/advisable 阻止来自 docker.io 的图像?

如有任何提示,我们将不胜感激!

gitlab-runner-helper 图片由 GitLab Runner to handle Git, artifacts, and cache operations 用于 dockerdocker+machinekubernetes 执行程序。

由于您更喜欢从私有注册表中拉取映像,因此可以 override the helper image。您的配置可以是:

[[runners]]
  (...)
  executor = "docker"
  [runners.docker]
    (...)
    helper_image = "my.private.registry:8080/gitlab/gitlab-runner-helper:tag"

请确保图像存在于您的注册表中或您的配置启用代理 docker hubregistry.gitlab.com。最后,您需要 运行 至少 Gitlab 运行ner 版本 13.7 并启用 FF_GITLAB_REGISTRY_HELPER_IMAGE 功能标志。

我觉得我有责任扩展已接受的答案(顺便说一句,这很棒),因为 'handle' 这个词基本上告诉我们的不多,它太抽象的。让我更详细地解释整个流程:

  1. 当构建即将开始时,gitlab-runner 会创建一个 docker 卷(您可以使用 docker 观察它如果需要,音量 ls)。此卷将用作您在构建期间使用的缓存和工件的存储。

  2. 第二件事——你将在每个阶段至少涉及 2 个容器:gitlab-runner-helper,容器和从你指定的图像创建的容器(在 . gitlab-ci.yml 或 config.toml)。 gitlab-runner-helper 容器做了什么,本质上,只是克隆上述 [=51= 中的远程 git 存储库(您正在构建) ] 卷以及缓存和工件。

它可以做到这一点,因为 gitlab-runner-helper 图像本身有 2 个重要的实用程序:git(显然 - 克隆 repo ) 和 gitlab-runner-helper 二进制文件(此实用程序可以拉取和推送工件、缓存)

  1. gitlab-runner-helper 容器在每个阶段之前启动几秒钟,以提取工件和缓存,然后终止。之后,将启动根据您指定的图像创建的容器,并且它还将附加此卷(来自步骤 1)- 这就是它接收工件的方式 btw。

@Nicolas 很好地描述了从 gitlab-runner-helper 中提取注册表的其余详细信息。我附加此评论只是为了某人,也许他想知道这个偷偷摸摸的“handle”这个词的确切含义。

希望对你有所帮助,祝你有个愉快的一天,我的朋友!