gitlab-runner可以缓存docker镜像构建中需要的依赖吗?
在gitlab runner上构建docker镜像
有一些COPY以及RUN 安装依赖包的过程
看到gitlab runner构建镜像每次RUN 安装依赖包,都远程下载
有什么方法可以缓存这些依赖包,不用远程下载吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不知道谁踩了我,如果是看不懂的话,我补充下
gitlab cache
是指git-runner中有个cache可以使用,官方文档都有如果觉得非要手把手教,建议不要从事开发工作
如果楼主的 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,所以在执行流水线时,所有拉取的、创建的镜像都是在宿主机上的。
关系如下:
但是,Docker 官方是不建议使用 dind 的方式进行 CI 的,有兴趣可以看下面两个链接:
如有不对,请多指正。