gitlab-runner可以缓存docker镜像构建中需要的依赖吗?

发布于 2022-09-12 02:22:17 字数 124 浏览 14 评论 0

在gitlab runner上构建docker镜像
有一些COPY以及RUN 安装依赖包的过程
看到gitlab runner构建镜像每次RUN 安装依赖包,都远程下载
有什么方法可以缓存这些依赖包,不用远程下载吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心病无药医 2022-09-19 02:22:17
  • 如果是觉得远程下载太慢了,可以替换源
  • Gitlab cache 的相关使用文档看下

不知道谁踩了我,如果是看不懂的话,我补充下

  • 远程下载太慢的话(如apt install xxx),可以替换linux的源,例如阿里的源
  • gitlab cache是指git-runner中有个cache可以使用,官方文档都有

如果觉得非要手把手教,建议不要从事开发工作

一抹苦笑 2022-09-19 02:22:17

如果楼主的 executor 是采用的 docker 方式,也即是使用 docker in docker 的方式进行构建镜像,那么可以将 runner 中的 /var/run/docker.sock 挂载到 executor 在执行 job 时所创建的 dind 容器中,这样,在 dind 容器中进行 build image 时,所使用的 docker daemon 其实是外部宿主机的 daemon,构建过程中所创建的中间镜像也是在 dind 容器外部的。那么,下次再执行 job 时,自然也是使用的外部的 daemon,也就可以使用以前构建产生的缓存了。

挂载的方法是,编辑 runner 的配置文件 /etc/gitlab-runner/config.toml,在 [runners.docker] 一栏找到 volumes 选项,改为 volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]

我个人部署 runner 也是以 docker 的形式部署的,在启动时 runner 镜像时我将宿主机的 docker.sock 挂载到了 runner 容器中,runner 容器执行 job 时所创建的每个容器都是创建在宿主机的,之后我又通过上面的设定,让 dind 容器使用外部的 docker.sock ,也就是间接地使用了 runner 的宿主机的 docker,所以在执行流水线时,所有拉取的、创建的镜像都是在宿主机上的。

关系如下:

WX20200426-093758@2x.png

但是,Docker 官方是不建议使用 dind 的方式进行 CI 的,有兴趣可以看下面两个链接:

如有不对,请多指正。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文