Docker 目录挂载 及 数据卷的备份与恢复【Centos7】

1.Docker目录挂载

1.1 不指定宿主机目录的情况

 docker run -it --name cent-test1 -v /usr/local/Datas centos:7 

  运行上面的命令可以将容器中的/usr/local/Datas目录挂载到宿主机,如下图所示,容器中会自动创建Datas目录.
Docker 目录挂载 及 数据卷的备份与恢复【Centos7】
运行如下命令,可以看到容器在宿主机中的目录挂载信息:

docker inspect 容器名称或这容器ID

Docker 目录挂载 及 数据卷的备份与恢复【Centos7】
进入到宿主机中的挂载目录可以看到刚刚在容器中添加的文件
Docker 目录挂载 及 数据卷的备份与恢复【Centos7】

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目录.但是却无法在目录下进行创建文件,如下图:
Docker 目录挂载 及 数据卷的备份与恢复【Centos7】

  • 解决方式—>需要添加privilege=true来获取权限
docker run -it --name cent-test3 -v /usr/local/Datas-Host:/usr/local/Datas-Inner --privileged=true  centos:7

Docker 目录挂载 及 数据卷的备份与恢复【Centos7】

1.3 指定另一个容器数据卷为本容器数据卷的情况

上面所提到的挂载目录,或者说目录映射在docker中又叫Data Volume数据卷.利用下面的命令可以指定cent-test4和cent-test3共用一个数据卷

docker run -it --name cent-test4 --volumes-from cent-test3 centos:7

Docker 目录挂载 及 数据卷的备份与恢复【Centos7】
注意:上面的命令还是得加上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—>由于该目录与宿主机的当前目录做了映射,所以该压缩文件(即备份文件)会被备份到宿主机的当前目录

问题展示:
Docker 目录挂载 及 数据卷的备份与恢复【Centos7】
如上图,也出现了Permission denied字样.其实这和上面1.2/1.3中的问题一样,原因是CentOS7中的安全模块SELinux把权限禁掉了,我试了多次发现这里并不能像1.2/1.3中那样加privilege=true的方式解决.我最后的解决方式如下:

setenforce 0  ##临时关闭SELinux

Docker 目录挂载 及 数据卷的备份与恢复【Centos7】

2.2 恢复

docker run --rm  --volumes-from cent-test3 -v $(pwd):/backup centos:7 tar xvf /backup/data-backup.tar

Docker 目录挂载 及 数据卷的备份与恢复【Centos7】