我有两台主机,每台都安装了 docker。
众所周知,每个 docker 都将图像存储在本地/var/lib/docker
目录中。
所以如果我想使用一些图像,例如ubuntu
,我必须docker pull
在每个主机上执行从互联网下载。
我认为它很慢。
我可以将图像存储在共享磁盘阵列中吗?然后让一些主机拉一次镜像,允许每个可以访问共享磁盘的主机直接使用镜像。
这是可能的还是好的做法?为什么docker不是这样设计的?
它可能需要破解 docker 的源代码来实现这一点。
我有两台主机,每台都安装了 docker。
众所周知,每个 docker 都将图像存储在本地/var/lib/docker
目录中。
所以如果我想使用一些图像,例如ubuntu
,我必须docker pull
在每个主机上执行从互联网下载。
我认为它很慢。
我可以将图像存储在共享磁盘阵列中吗?然后让一些主机拉一次镜像,允许每个可以访问共享磁盘的主机直接使用镜像。
这是可能的还是好的做法?为什么docker不是这样设计的?
它可能需要破解 docker 的源代码来实现这一点。
2016.1.25 更新 docker 镜像功能已弃用
因此这个答案现在不适用,留作参考
旧信息
您需要的是 docker 注册表的镜像模式,请参阅https://docs.docker.com/v1.6/articles/registry_mirror/
它直接支持docker-registry
当然,您可以在本地使用公共镜像服务。
你看过这篇文章吗
Dockerizing 一个 Apt-Cacher-ng 服务
http://docs.docker.com/examples/apt-cacher-ng/
提炼
这个容器使任何包的第二次下载几乎是即时的。
至少一个节点会很快,我认为应该可以告诉第二个节点使用第一个节点的缓存。
编辑:您可以运行自己的注册表,命令类似于
sudo docker run -p 5000:5000 registry
看
您正在尝试做的事情不应该像cpuguy83在这个github/docker 问题上所解释的那样工作。
的确:
底层存储驱动程序需要同步访问。
分享/var/lib/docker
远远不够,而且行不通!
如果您想:您应该使用注册表:
- 严格控制图像的存储位置
- 完全拥有您的图像分发管道
- 将图像存储和分发紧密集成到您的内部开发工作流程中
所以我想这是解决这个问题的(/你的)最佳选择(但我想你已经得到了那个信息——我只是在这里添加它来更新细节)。
祝你好运!