docker的数据卷
docker container的某个目录可以映射到宿主机的某个目录,共享目录,就是一个磁盘供两个主机(一个宿主机,一个docker container)同时挂载
对数据卷的修改会立即生效 对数据卷的更新与镜像无关,镜像不会改变 数据卷会一直存在,直接保存在宿主机的目录中
容器使用数据卷的方式
1、创建容器的时候直接使用数据卷就行
-v, –volume value Bind mount a volume (default []) 指明docker共享目录,挂载点,在这里的文件,宿主机也可以看到,并且同步,其实就是一个磁盘,默认映射的宿主机路径很长
#终端1 [root@localhost ~]#docker run -it --name bob -v /data centos:latest [root@9f948c274f1c /]# [root@9f948c274f1c /]# ls anaconda-post.log bin data dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@9f948c274f1c /]# cd data/ [root@9f948c274f1c data]# ls [root@9f948c274f1c data]# echo hello >> txt [root@9f948c274f1c data]# ls txt [root@9f948c274f1c data]# cat txt hello #终端2 [root@bogon /var/lib/docker/volumes]#ls f6c966078b56982e978e206d13e6fa755bf9b1f3b7ed464d80c05b35fb618135 metadata.db [root@bogon /var/lib/docker]#cd volumes/f6c966078b56982e978e206d13e6fa755bf9b1f3b7ed464d80c05b35fb618135/_data/ [root@bogon /var/lib/docker/volumes/f6c966078b56982e978e206d13e6fa755bf9b1f3b7ed464d80c05b35fb618135/_data]#ls txt [root@bogon /var/lib/docker/volumes/f6c966078b56982e978e206d13e6fa755bf9b1f3b7ed464d80c05b35fb618135/_data]#cat txt hello
将container删除,保存的文件还在宿主机目录里面
2、上面是服务自动分配的目录对应关系,路径太长,有时候我们需要自己指定对应关系
下面的示例将container的/data目录与主机的/data1目录相对应,这样,在容器的/data目录下操作,实际和主机操作/data1是同一个目录,即使容器被删除,文件还存在
[root@localhost ~]#docker run -it --name sam -v /data:/data1 centos:latest [root@1261df495754 /]# [root@1261df495754 /]# cd data/ [root@1261df495754 data]# ls txt [root@1261df495754 data]# cat txt hello
3、在dockerfile中定义
4、Docker 挂载数据卷的默认权限是读写,用户也可以通过 :ro 指定为只读。
[root@localhost ~]#docker run -it --name sam -v /data:/data1:ro centos:latest
在容器之间共享卷
–volumes-from value Mount volumes from the specified container(s) (default [])
后跟容器名
删除容器的时候同时删除卷
docker run --rm 表示容器关闭的时候会自动被删除,同时删除其卷,当所有的容器都不再使用此卷的时候(此容器是最后一个使用此卷的容器时)
备份和恢复
docker run --rm --volum-from vol_container -v $(pwd):/backup busybox tar cvf /backup/data.tar /data 同时使用两个卷,前面一个是正常使用的,后面是备份的,
–
–
–
评论前必须登录!
注册