(概要)数据卷是宿主机中的一个目录或文件
• 当容器目录和数据卷目录绑定后,对方的修改会立即同步
• 一个数据卷可以被多个容器同时挂载
• 一个容器也可以被挂载多个数据卷
一、配置容器的数据卷
以centos7创建容器为例,先拉取centos7镜像
[root@localhost ~]# docker pull centos:7
查看镜像
创建容器c1,并且给容器挂载数据卷
docker run -it --name=c1 -v /root/data_container:/root/data centos:7 /bin/bash
通过“-v”参数,把容器内目录挂载到宿主机上,左边 /root/data_container 就是宿主机的目录,右边 /root/data 就是容器挂载的目录
创建好后就进入到了容器内部,通过ls命令查看,发现已存在一个data目录
退出回到宿主机,查看发现也已创建data_container目录
进去这个目录,在里面创建个txt文件
此时再进入容器查看。因为刚才是用“-it”参数创建的,所以退出容器后容器会自动关闭,要先启动容器,然后再进去查看
查看发现,刚才在宿主机目录下创建的文件也已经出现在容器目录上
同样地在容器目录下也创建个txt文件
退出容器回到宿主机,查看发现text01.txt文件也已存在宿主机上
通过 “docker inspect” 命令查看容器详细信息,在信息里面找到Binds和Mounts可以查看对应的挂载信息
二、容器挂载多个数据卷
新创建一个容器c2,让他挂载两个数据卷
docker run -it --name=c2 -v /root/data_container:/root/data -v /root/data_container01:/root/data01 centos:7 /bin/bash
在第一个“-v”参数中,c2容器挂载到了刚才上面c1容器的数据卷宿主机目录。第二个“-v”参数中,新建数据卷挂载到宿主机 /root/data_container01 目录下
创建好容器后,查看容器
发现已经有对应的数据卷目录。并且查看data目录会发现刚才c1容器创建的两个txt文件也存在,说明数据卷能够被多个容器挂载
退出容器回到宿主机,查看发现也已经多了个data_container01目录
先进去data_container目录,再创建一个txt文件
再切换到data_container01目录,也创建一个txt文件
从新进入容器c2
切换到data目录下,查看目录
再切换到data01目录,发现text03.txt文件也已存在
三、数据卷容器
创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from )。
先创建一个容器cv1,让其作为数据卷容器
docker run -id --name=cv1 -v /root/volume centos:7 /bin/bash
这次“-v”参数后面跟的内容不一样,这个是指定了挂载cv1容器作为数据卷的容器的挂载目录
创建好后cv1后,通过 “docker inspect” 命令查看cv1的详细信息
找到Mounts这一行,在下面可以看到source详情,这里指明了作为数据卷容器的cv1在宿主机下的挂载目录
然后再创建一个容器cv2,让其挂载到容器cv1
docker run -it --name=cv2 --volumes-from cv1 centos:7 /bin/bash
用“--volumes-from”参数指定要挂载的数据卷容器
创建好cv2后,进入 /root 目录查看
查看发现已经有对应的挂载目录出现
切换到 /volume 目录下,创建一个txt文件
退出cv2回到宿主机,查看刚才的cv1容器详情下的Mounts下面的source的目录地址
发现刚才在cv2下创建的txt文件已经存在
再创建一个容器cv3,让其也挂载cv1容器
docker run -it --name=cv3 --volumes-from cv1 centos:7 /bin/bash
创建好后进入 /root 目录下,查看发现也已存在对应的挂载目录。切换到 /volume 目录下查看,cv2容器下创建的txt文件也已存在
在cv3中也创建一个txt文件
退出cv3,查看cv1在宿主机下的挂载目录。发现在cv3下创建的txt文件也已经存在
从新进入cv2容器,查看挂载目录。发现cv3创建的txt文件也有存在
由此说明数据卷容器也能被多个容器挂载,共享同一个存储空间