在没有卷的情况下,Docker 容器和 Kubernetes pod 将数据写入磁盘吗?

在没有卷的情况下,Docker 容器和 Kubernetes pod 将数据写入磁盘吗?

有关使用 Docker 引擎时 Docker 内部以及在 Kubernetes 中运行的容器的常见问题。

Docker 容器是短暂的,这意味着如果容器被销毁,写入该容器内部的任何数据都会消失。这引出了我的问题:

如果启动一个容器,其中包含一个应用程序,该应用程序将文件写入不受卷支持的目录,那么该文件实际上写入了哪里?它实际上是写入磁盘吗?它实际上是写入主内存,然后在docker stop发生这种情况后刷新到磁盘吗?是其他原因吗?

对于在 Kubernetes 中运行的 pod 的 Docker 容器,也有同样的问题。机制是否相同?

答案1

Docker 数据仅用于“tmpfs 挂载”,并保存在主机内存中。您可以在文章中了解如何创建此类挂载 使用 tmpfs 挂载

所有其他非持久性数据都保存在可写层容器,即由 存储驱动程序。容器删除后,这些数据将不再保留(但如果仅暂停或停止,则会保留),并且读写速度都低于本机文件系统性能,因为它们在传递到主机磁盘驱动程序之前要经过存储驱动程序。

Docker 有多个可用的存储驱动程序,如文章中所述 Docker 存储驱动程序

文档中没有指定容器的可写层存储在磁盘上的哪个位置,可能是为了让每个存储驱动程序的实现都能自由地做出最佳选择。

要查看 Docker 引擎正在使用的存储驱动程序,请运行:

$ sudo docker info

如果您使用 Docker 默认存储驱动程序,您可能会看到如下内容:

在此处输入图片描述

使用以上信息,我猜测所有容器的可写层都将存储在文件夹下/var/lib/docker/aufs,其中aufs代表使用的存储驱动程序(但这只是猜测)。

相关内容