首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头工人:访问主机图像注册表

问码头工人:访问主机图像注册表
EN

Stack Overflow用户
提问于 2022-04-06 10:52:40
回答 2查看 60关注 0票数 1

我利用Linux 32核心服务器作为Gitlab Runner主机。所有作业都在docker内部执行,其中一些作业执行坞构建。对于在码头访问码头,我们使用船坞船坞方法。

我注意到,在每次构建时,DinD都从docker-集线器获取Dockerfile中指定的基本映像。虽然这是合理的,但这并不是我所希望的,因为它浪费了相当多的时间。

是否有可能在主机(根)和构建容器(DinD)之间共享本地映像?

EN

回答 2

Stack Overflow用户

发布于 2022-04-06 11:42:30

是否有可能在主机和码头集装箱之间共享本地映像?

不是的。在/var/lib/docker中,实际的映像数据以不透明的安装特定形式存储,图像数据和容器数据在某种程度上是混合的。两个不同的Docker守护进程不能共享一个/var/lib/docker目录,并且无法将图像从一个Docker守护进程直接移动到另一个Docker守护进程。

如果每个构建都通过一个DinD容器启动一个新的Docker守护进程,那么它将从空的本地映像开始,并且每次都必须重新提取基本映像。如果您可以重新配置CI系统以重用主机的Docker守护进程,那么这将不是一个问题。

(在每次构建中提取基本映像可能是一种很好的做法,因为像ubuntu:20.04这样的映像会定期使用安全修复更新,但在正常操作中,Docker将能够判断映像实际上没有改变,只需要下载小的映像清单。如果每个构建都是从一个空状态开始的,那么这不是一个选项。)

票数 1
EN

Stack Overflow用户

发布于 2022-04-07 10:43:27

最后,我继续使用DinD服务,而没有显式地在config.toml中挂载套接字(我还想尝试挂载方法,以后可能会编辑这个答案)。我是这样做的,因为我发现了Gitlab指南,它最终帮助我减少了网络等待时间。

我基本上已经设置了一个本地注册表,并使用主机IP (hostname --ip-address)与运行程序共享它。

代码语言:javascript
复制
# docker-compose.yaml
version: '3'
services:
  registry:
    image: registry:2
    container_name: registry
    ports:
      - "6000:5000"
    environment:
      - REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io
    restart: always

然后在我的config.toml中使用它(不要忘记重新启动运行程序)。

代码语言:javascript
复制
# /etc/gitlab-runner/config.toml 
    # [...]
    [[runners.docker.services]]
      name = "docker:dind"
      command = ["--registry-mirror", "http://xxx.xxx.xxx.xxx:6000"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71765455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档