![](/img/trans.png)
[英]Setting insecure registry in docker-in-docker image docker daemon
[英]Docker-in-Docker: access hosts image registry
我利用 Linux 32 核服务器作为 Gitlab Runner 主机。 所有作业都在 docker 内执行,其中一些作业执行 docker 构建。 为了访问 docker 中的 docker,我们使用tls 支持的 docker-in-docker方法。
我注意到在每次构建时,DinD 都会从 docker-hub 中获取 Dockerfile 中指定的基本映像。 虽然这是有道理的,但这并不是我想要的,因为它浪费了很多时间。
是否有可能在主机(root)和构建容器(DinD)之间共享本地图像?
是否有可能在主机和 [Docker-in-Docker] 容器之间共享本地图像?
不。实际图像数据以不透明的特定于安装的形式存储在/var/lib/docker
中,并且图像和容器数据有些混合。 两个不同的 Docker 守护进程不能共享一个/var/lib/docker
目录,并且无法直接将镜像从一个 Docker 守护进程移动到另一个。
如果每个构建都通过 DinD 容器启动一个新的 Docker 守护进程,那么它将以空的本地镜像开始,并且每次都必须重新拉取基础镜像。 如果您可以重新配置 CI 系统以重用主机的 Docker 守护程序,那么这将不是问题。
(在每次构建时拉取基础镜像可能是一个好习惯,因为像ubuntu:20.04
这样的镜像会定期更新安全修复,但在正常操作中 Docker 将能够判断镜像实际上没有改变,只需要下载小图像清单。如果每个构建都从空的 state 开始,则这不是一个选项。)
我最终继续使用 DinD 服务,而没有在config.toml
中显式安装套接字(我也想尝试安装方法,将来可能会编辑这个答案)。 我这样做是因为我找到了 Gitlab 的指南,它最终帮助我减少了网络等待时间。
我基本上已经设置了一个本地注册表并使用主机 IP ( hostname --ip-address
) 与运行者共享它
# 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 中使用它(不要忘记重新启动跑步者)。
# /etc/gitlab-runner/config.toml
# [...]
[[runners.docker.services]]
name = "docker:dind"
command = ["--registry-mirror", "http://xxx.xxx.xxx.xxx:6000"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.