有关使用 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
代表使用的存储驱动程序(但这只是猜测)。