简述Volume
-
在学习volume之前,我们需要思考一个问题
容器删除之后,其数据也会丢失,那么如何去解决容器删除,数据不丢失呢? -
这个时候就有了存储卷,那么什么是存储卷呢?
我们可简单理解成在宿主机上找一个文件系统(主机级的)之上存在某一目录,而后把这个目录直接与容器内部的文件系统之上的某一目录建立所谓的绑定关系。随后容器内的进程向目录中写数据的时候是直接写在宿主机的目录上。实现容器内的数据保存时可以绕过容器内部文件系统的限制从而与宿主机的文件系统建立了关系。二者是同步的。可以使得连个隔离的容器在某一目录上建立绑定关系,实现一定程度的共享。并且不用担心容器关闭后数据丢失,保证数据持久性。 -
存储卷的初衷是独立于容器的生命周期,实现数据持久化,因此删除容器时不会删除卷,也不会对哪怕未被引用的卷做垃圾回收操作。
-
Docker有两种类型的卷
第一种,指定容器的目录,宿主机的目录默认在/var/lib/docker/volumes/中
第二种,指定宿主机目录和容器的目录 -
一个容器可以挂载多个存储卷
使用Volume - 指定容器的目录
首先创建一个容器b2,“-v”将存储卷挂载在容器的/data目录下,不要使用“–rm”参数,否则宿主机的文件也会被删除
新开窗口,查看b2信息,type挂载类型,name为挂载id,source为在宿主机的关联地址,/data为容器的存储卷地址
接下来进入宿主机的关联地址,发现该目录已经创建,查看有无文件
编写一个文本
在容器的关联地址进行查看,发现内容存在
此时在容器中书写内容
在宿主机中也可以看到在容器中书写的内容
关闭并删除b2容器
在容器b2被删除后,在宿主机关联的文件中我们可以看到该文件依旧没有被删除
使用Volume - 指定宿主机目录和容器目录
指定宿主机的关联地址为“/data/volumes/b2”,容器的关联地址为“/data”
语法: -v 宿主机路径/:容器路径
新窗口打开,查看b2容器的属性,类型变为bind,宿主机的关联地址为/data/volumes/b2,容器的关联地址为/data
查看宿主机是否存在"/data/volumes/b2"的目录,发现已经创建
在该目录书写一个文本
在容器中查看,可以知道关联成功
在容器中添加内容
在宿主机也可以查看
退出容器
因为刚刚b2容器执行完毕之后就自动删除,但是关联的数据是否删除了呢?此时我们对容器的指定地址进行修改,宿主机地址保持不变,依旧可以看到之前的数据
通过在容器中添加文本内容
在宿主机中依旧可以新添加的文本信息
Docker基础篇(7)- Docker运行nginx、redis容器
Docker基础篇(9)- 多个容器共享一块卷、操作Volume命令