Docker 目录挂载 及 数据卷的备份与恢复【Centos7】
1.Docker目录挂载
1.1 不指定宿主机目录的情况
docker run -it --name cent-test1 -v /usr/local/Datas centos:7
运行上面的命令可以将容器中的/usr/local/Datas目录挂载到宿主机,如下图所示,容器中会自动创建Datas目录.
运行如下命令,可以看到容器在宿主机中的目录挂载信息:
docker inspect 容器名称或这容器ID
进入到宿主机中的挂载目录可以看到刚刚在容器中添加的文件
1.2 指定宿主机目录的情况
docker run -it --name cent-test2 -v /usr/local/Datas-Host:/usr/local/Datas-Inner centos:7
运行上面的命令可以将宿主机中的 /usr/local/Datas-Host目录和容器中的/usr/local/Datas-Inner目录进行映射,如下图所示,容器中会自动创建Datas-Inner目录.但是却无法在目录下进行创建文件,如下图:
- 解决方式—>需要添加privilege=true来获取权限
docker run -it --name cent-test3 -v /usr/local/Datas-Host:/usr/local/Datas-Inner --privileged=true centos:7
1.3 指定另一个容器数据卷为本容器数据卷的情况
上面所提到的挂载目录,或者说目录映射在docker中又叫Data Volume即数据卷.利用下面的命令可以指定cent-test4和cent-test3共用一个数据卷
docker run -it --name cent-test4 --volumes-from cent-test3 centos:7
注意:上面的命令还是得加上privilege=true
2.数据卷的备份/恢复和删除
2.1备份------->在centos7里下面的代码会有点问题
docker run --rm --volumes-from cent-test3 -v $(pwd):/backup centos:7 tar cvf /backup/data-backup.tar /usr/local/Datas-Inner
先对上面的命令进行解释,再说为啥不行:
- docker run --rm —>启动一个新的容器,执行完毕删除
- –volumes-from cent-test3 —>备份cent-test3容器中的内容
- $(pwd) —>宿主机中目录,相当于"./",即当前目录
- $(pwd):/backup —>宿主机中的当前目录映射新容器中的/backup目录
- centos:7 即指定镜像文件
- tar cvf /backup/data-backup.tar /usr/local/Datas-Inner—>将目标容器即cent-test3中的/usr/local/Datas-Inner目录压缩到新容器中的/backup目录下,文件名为data-backup.tar—>由于该目录与宿主机的当前目录做了映射,所以该压缩文件(即备份文件)会被备份到宿主机的当前目录
问题展示:
如上图,也出现了Permission denied字样.其实这和上面1.2/1.3中的问题一样,原因是CentOS7中的安全模块SELinux把权限禁掉了,我试了多次发现这里并不能像1.2/1.3中那样加privilege=true的方式解决.我最后的解决方式如下:
setenforce 0 ##临时关闭SELinux
2.2 恢复
docker run --rm --volumes-from cent-test3 -v $(pwd):/backup centos:7 tar xvf /backup/data-backup.tar