在宿主机上能够被共享的目录(可以是文件)就被称为存储卷(volume)。
存储卷:在宿主机中找一个本地的文件系统,可能存在某一个目录中,直接与容器上的文件系统中的某一目录建立绑定关系。
使用存储卷的原因:
- 关闭并重启容器,数据不会受影响;但删除Docker容器,则其更改将会消失
- 存储于联合文件系统中,不易于宿主机访问
- 容器间数据共享不便
Docker有两种类型的卷
每种类型都在容器中存在一个挂载点,但其在宿主机上位置有所不同
- 绑定挂载卷:在宿主机上人工指定一个特定的路径,在容器中也需要指定一个特定的路径,两个已知的路径建立关联关系
- docker管理卷: 只需要在容器内指定容器的挂载点是什么,而被绑定宿主机下的那个目录,是由容器引擎daemon自行创建一个空的目录,或者使用一个已经存在的目录,与存储卷建立存储关系,这种方式极大解脱用户在使用卷时的耦合关系,缺陷是用户无法指定那些使用目录,临时存储比较适合
在容器中使用Volumes
docker run命令使用-v选项使用Volume
docker run -it -name rbox1 -v /data busybox #/data指定docker的目录
docker inspect -f {{.Mounts}} rbox1 查看rbox1容器的卷,卷标识符及挂载的主机目录
bind-mount volume:
docker run -it -v HOSTDIR:VOLUMEDIR --name rbox2 busybox #宿主机目录:容器目录
docker inspect -f {{.Mounts}} rbox2
实际操作:
docker管理卷
#创建并启动名称为b2的容器,绑定/data目录
[root@zanghao01 ~]# docker run --name b2 -it -v /data busybox
/ # ls l
ls: l: No such file or directory
/ # ls /
bin data dev etc home proc root sys tmp usr var
root@zanghao01 ~]# docker inspect b2
#找到mount这块
"Mounts": [
{
"Type": "volume",
"Name": "52276af0a569dd076cf0917cee99f624cbc7decbcab4b70c292f3db6d564fdef",
"Source": "/var/lib/docker/volumes/52276af0a569dd076cf0917cee99f624cbc7decbcab4b70c292f3db6d564fdef/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
[root@zanghao01 ~]# cd /var/lib/docker/volumes/52276af0a569dd076cf0917cee99f624cbc7decbcab4b70c292f3db6d564fdef/_data
[root@zanghao01 _data]# ls
#创建文件test.html
[root@zanghao01 _data]# echo "hello container" >> test.html
#可以看到容器中已出现该文件
/data # ls
test.html
绑定挂载卷
#创建关闭就删除容器 使用了-rm参数
root@zanghao01 ~]# docker run --name b2 -it --rm -v /data/volumes/b2:/data busybox
[root@zanghao01 _data]# docker inspect b2
"Mounts": [
{
"Type": "bind",
"Source": "/data/volumes/b2",
"Destination": "/data",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
root@zanghao01 _data]# cd /data/volumes/b2
[root@zanghao01 b2]# vim index.html
#再重启创建b2容器
[root@zanghao01 ~]# docker run --name b2 -it --rm -v /data/volumes/b2:/data busybox
/ # cd data
/data # ll
sh: ll: not found
/data # ls
index.html
/data # cat index.html
nihao hahahahhah