1、容器数据卷是什么

        在我们学习docker命令的时候,有一个命令:”docker rm -f 容器ID“  这个命令,假如我们现在有一个mysql容器,mysql中已经存储了1千万数据,某一个开发/运维手欠,不小心执行了 docker rm -f mysql 命令,这个时候容器是不是就没有了,并且里面的数据也被干掉了。

为了解决这个问题,就有了容器数据卷的出现,将docker容器内的数据保存进宿主机的磁盘中。

1.1、命令、注意点

命令: docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录      镜像名

其中”-v /宿主机绝对路径目录:/容器内目录 “ 就是属于容器卷范畴

注意点:在增加容器卷的时候必须加上”--privileged=true“,否则会出现问题

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied

解决办法:在挂载目录后多加一个--privileged=true参数即可  如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。

2、容器数据卷能干什么

        将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的 Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。为了能保存数据在docker中我们使用容器卷。

2.1、特点

  • 数据卷可在容器之间共享重用数据
  • 卷中的更改可以直接实时生效
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用它为止 

3、数据卷案例

3.1、宿主vs容器之间映射添加容器卷

命令:docker run -it --privileged=true -v /usr/local/tool/volumn:/tmp/files  centos:7 /bin/bash

以交互方式启动centos 镜像,并且将宿主机 /usr/local/tool/volumn 挂载到 容器/tmp/files 目录上

执行后,宿主机和容器将自动创建相应的文件夹(如果不存在)

docker 部署MySQL挂在数据卷异常 docker mysql 数据卷_数据

咱们也可以通过  docker inspect 容器ID 命令查看挂载是否成功

docker 部署MySQL挂在数据卷异常 docker mysql 数据卷_docker_02

 

3.2 、读写规则映射添加

容器卷挂载可以设置 容器内门读写规则,在3.1中,在容器内可以创建2.txt 说明容器内是可以写入的(默认读写都可以)

读写命令:docker run -it --privileged=true -v /usr/local/tool/volumn:/tmp/files  centos:7 /bin/bash

等同于  docker run -it --privileged=true -v /usr/local/tool/volumn:/tmp/files:rw

只读命令:docker run -it --privileged=true -v /usr/local/tool/volumn:/tmp/files:ro

只读实例:

docker 部署MySQL挂在数据卷异常 docker mysql 数据卷_docker_03

3.3、卷的继承和共享 

有的时候我们希望多个容器挂载的 宿主继目录和容器目录一致,则可以先创建一个容器,其他容器继承这个容器的 挂载

命令:docker run -it  --privileged=true --volumes-from 父类容器  --name centos2 centos:7 /bin/bash

实例:

docker 部署MySQL挂在数据卷异常 docker mysql 数据卷_centos_04

注意: centos2继承centos1 ,centos1关闭,不影响cengtos2的容器卷

3.4、多容器卷挂载

命令:

docker run -it --privileged=true -v /usr/local/tool/volumn:/tmp/files -v /usr/local/tool/volumn2:/tmp/files2  centos:7 /bin/bash

同单容器卷挂载效果