通过 NFS 公开 /var/lib/docker 以服务于内存有限的主机的影响

Posted

技术标签:

【中文标题】通过 NFS 公开 /var/lib/docker 以服务于内存有限的主机的影响【英文标题】:Implications of exposing /var/lib/docker over NFS to serve hosts with limited memory 【发布时间】:2016-07-12 19:05:41 【问题描述】:

通过 NFS 导出 /var/lib/docker 有什么影响?这个想法是将 docker 图像存储在服务器中,并将其导出到内存有限的主机来存储和运行容器。这对于避免让每个主机下载并存储它自己的 docker 镜像库很有用。主机可以使用 FS-Cache 来限制网络上的数据传输。

【问题讨论】:

【参考方案1】:

/var/lib/docker 目录设计为由单个守护程序独占访问,并且永远不应与多个守护程序共享。

让多个守护进程使用相同的/var/lib/docker 会导致很多问题,并可能导致数据损坏。

例如,守护进程保持一个内存状态,哪些图像正在使用(由容器),哪些没有;使用这些图像的多个守护程序不会跟踪该图像(一个图像可能正在被另一个守护程序使用),并在使用时删除该图像。

Docker 还将各种其他文件存储在 /var/lib/docker 中,例如用于用户定义网络的键/值存储,它不是为多个守护进程同时访问而设计的。

【讨论】:

感谢您的及时回复。 关于您的回复的后续问题。在 docker 守护进程中分离镜像层和状态,这样多个守护进程可以共享镜像,而不是每次在单独的守护进程中启动相同类型的容器时都下载它不是很好吗?换句话说,docker 是否提供任何功能来在不同主机上运行的守护进程之间共享下载的图像? 不,docker不支持共享图存储,主要是因为上面的原因(一个主机上没有使用的镜像,在另一台主机上仍然可以使用);虽然有第三方存储驱动程序插件的实验性支持;见github.com/docker/docker/blob/…,例如这里有一个ceph驱动插件; github.com/hustcat/docker-graph-driver 谢谢。我去看看。

以上是关于通过 NFS 公开 /var/lib/docker 以服务于内存有限的主机的影响的主要内容,如果未能解决你的问题,请参考以下文章

Docker下/var/lib/docker/overlay2空间清理办法

docker的overlay2目录

如何在 Windows 10 docker 桌面中访问 /var/lib/docker?

Docker 学习总结(73)—— 常见的24 个 Docker 技巧

Docker 学习总结(73)—— 常见的24 个 Docker 技巧

rm -rf /var/lib/docker 设备或资源忙问题处理