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

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

阅读 6k
2 个回答
  • 如果是觉得远程下载太慢了,可以替换源
  • Gitlab cache 的相关使用文档看下

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

  • 远程下载太慢的话(如apt install xxx),可以替换linux的源,例如阿里的源
  • 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,所以在执行流水线时,所有拉取的、创建的镜像都是在宿主机上的。

关系如下:

WX20200426-093758@2x.png

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

如有不对,请多指正。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题