Why Data Volumes? 来自马哥教育
Data volumes
Volume types
绑定挂载卷:在宿主机和容器上各指明绑定路径才能进行绑定。
docker管理卷:在容器内指定挂载点,而被挂载点即宿主机上的挂载路径不需要用户创建,而是由docker daemon维护
在容器中使用Volumes(即使用docker管理卷)
-v /data 路径默认不存在
查看/data属于哪个路径?
# docker inspect b1
那么在容器b1的data目录下是可以看到此文件的
同时在容器内的data目录下操作,比如新建文件等在宿主机也是可以看到的。
以上就是有docker管理的卷
另外一种类型:绑定挂载卷
删除之前的镜像,重新启动
# docker run --name b1 -it --rm -v /data/volumes/b1:/data busybox // -v /data/volumes指定宿主机路径,把这个路径关联到b1上的data目录下
注意,即使在宿主机上/data/volumes/b1这个目录之前不存在,在挂载的那一刻也被在宿主机上创建的,但必须明确指定这个路径,
其他都与docker管理卷相似,在容器创建文件在宿主机上可以看到,相反亦可以。
以上两种存储都具有持久能力,例如:
[root@node1 ~]# cd /data/volumes/b1/
[root@node1 b1]# vim index.html //在宿主机上的/data/volumes/data目录下创建一个网页文件
虽然上述容器b1退出并删除,但是之前创建的index.html仍然是存在的。
下次在启动容器b1时,仍然把宿主上的挂载目录指定为之前创建的目录/data/valumes/data,则仍然可以看到,注意,一定要和之前的容器相同。
因此就有了持久功能。
多个容器共享宿主机同一个存储卷
一个docker的目录能够与宿主机的目录建立关联关系,那么两个docker容器的目录就可以关联到宿主机的同一个目录上,这样就可以实现共享存储卷了。
上述演示了两个容器共享一个宿主机存储卷,但是b2必须使用 -v /data/volumes/b1:/data 指定b1的目录,可以在初始化容器b2时采用直接复制b1的存储卷路径
可以创建一个容器,这个容器可以不启动,只要存在就行,这个容器作为其他生产容器的基础架构容器。在启动其他生产容器时,直接复制基础架构容器的存储设置即可。
使用场景
Sharing volumes
# docker run --name infracon -it -v /data/infracon/volume/:/data/web/html busybox //创建一个基础服务的容器,可以不启动,这里使用交互式 -it 是为了演示效果。
/ # //-v /data/infracon/volume/ 指定宿主机卷路径 /data/web/html :关联容器的路径
# docker run --name nginx --network container:infracon --volumes-from infracon -it busybox
//另起一个窗口,--network container:infracon表示nginx容器加入到基础容器infracon的网络中,--volumes-from infracon表示使用容器infracon的挂载卷路径
# docker inspect infracon
# docker inspect nginx //同上
docker存储卷、基于docker file做镜像文件,以及使用hap做私有仓库