由于每个容器都有自己用户态的文件系统,所以默认情况下当容器对自己的文件系统进行修改(比如新增文件,修改文件)时,其实修改的是自己容器自己的文件,而不是修改的宿主机的文件系统,所以当容器被删除后,在容器内增加或者修改的文件也就不见了。
为让容器内的数据可以被持久化到宿主机上,docker容器提供了数据卷的功能。当容器内需要持久化数据时,可以先在宿主机上创建一个卷(也就是一个文件目录),然后创建容器时把这个数据卷映射到容器内自己的文件系统目录内,这样当容器内添加文件时,其实是把文件添加到了宿主机上,由于卷是在宿主机上的,所以即使容器被删除了,容器创建的数据还是存在的。
如上图,我们在宿主机上创建了一个docker卷,然后我们在创建容器时,就可以把这个数据卷映射到容器内文件系统的code目录。
我们可以使用下面命令,在宿主机上创建一个名为myvol的数据卷:
$ docker volume create myvol
然后我们可以使用下面命令把myvol这个卷挂载到docker容器的code目录
$ docker container run -dit --name voltainer \
--mount source=myvol,target=/code \
alpine
也就是说用户可以在宿主机上先创建卷,然后在创建容器时将卷挂载到容器上。数据卷会被挂载到容器文件系统的某个目录之下,任何写到该目录下的内容都会写到卷中。即使容器被删除,卷与其上面的数据仍然存在。
其实我们可以把卷到容器文件的映射比作实际的文件目录和软连接的之间的关系,当我们建立一个软连接后,我们可以通过软连接读写具体文件目录的内容,但是当我们删除软连接时,并不会删除实际的文件目录。也就是容器中的文件和卷各自拥有独立的生命周期,另外Docker不允许删除正在被容器使用的卷。
戳下面阅读
👇
点亮再看哦👇