关于使用 Docker 引擎时在 Kubernetes 中运行的 Docker 和容器内部结构的一般问题。
Docker 容器是短暂的,这意味着如果容器被销毁,写入该容器内部的任何数据都会消失。这引出了我的问题:
如果一个人启动一个包含应用程序的容器,该应用程序将文件写入一个没有卷支持的目录,那么该文件实际写入到哪里?它真的写入磁盘了吗?它实际上是写入主内存,然后一旦docker stop
发生就刷新到磁盘吗?是别的东西吗?
对于作为在 Kubernetes 中运行的 pod 的 Docker 容器,同样的问题。机制是一样的吗?
Docker 数据仅保存在“tmpfs 挂载”的主机内存中。您可以在使用 tmpfs 挂载一文中阅读有关如何创建此类挂载的信息 。
所有其他非持久性数据都保存在容器的可写层中,容器是由 存储驱动程序管理的整个文件系统。这些数据在容器被删除后不会保留(但如果它只是挂起或停止则不会保留),并且读取和写入速度都低于本机文件系统性能,因为它们在传递到主机之前通过存储驱动程序磁盘驱动程序。
如Docker 存储驱动程序一文中所述,Docker 有不止一种存储驱动程序可用 。
文档中没有指定容器的可写层存储在磁盘上的位置,可能是为了让存储驱动程序的每个实现自由做出最佳选择。
要查看您的 Docker 引擎正在使用的存储驱动程序,请运行:
如果您使用的是 Docker 默认存储驱动程序,您可能会看到如下内容:
使用以上信息,我的猜测是所有容器的可写层都将存储在文件夹下
/var/lib/docker/aufs
,其中aufs
代表所使用的存储驱动程序(但这只是一个猜测)。