从本节开启Docker存储部分,学习docker是如何对数据管理的。
上一篇:Docker的那些事儿—容器与外部网络的连通(27)
Docker中的数据包含两部分:镜像数据和容器数据。我们已经知道Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载只读的镜像层并在其上添加一个可读写的容器层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,镜像层及在顶部的容器层的组合被称为Union File System(联合文件系统)。
容器的读写层可以用来保存数据,但是存在的最大不足就是:容器中的数据会随着容器的消亡而消亡。然而有状态的容器都有持久化数据的需求,为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。Docker对容器数据的管理有两种方式:
1、数据卷(data volume)
2、数据卷容器(data volume container)