容器数据卷 :卷就是目录或者文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性;
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会再容器删除时删除其挂载的容器卷。
简单来说就是将docker容器内的数据保存进宿主机的磁盘中,达到数据持久化

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

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

特点:
1:数据卷可在容器之间共享或重用数据。
2:卷中的更改可以直接实时生效。
3:数据卷中的更改不会包含在镜像的更新中。
4:数据卷的生命周期一直持续到没有容器使用为止。

1、宿主机和容器之间映射添加容器卷

1.1、运行并挂载映射容器卷

  1. docker run -it --privileged=true -v /tmp/docker_data:/tmp/docker_data --name=u1 ubunt

1、docker中创建的文件/tmp/docker_data/a.txt,自动同步到宿主机/tmp/docker_data目录下;
2、宿主机/tmp/docker_data目录下创建的b.txt也会同步到docker容器中/tmp/docker_data目录下;
image.png

1.2、查看数据卷是否挂载成功

  1. docker inspect 镜像ID

image.png

3、容器挂了,宿主机添加文件后,重启容器,依旧能把文件同步至容器中

2、读写规则映射添加说明

2.1、读写(默认)

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

2.2、只读

容器实例内部被限制,只能读不能写;宿主机写入内容,可以同步给容器。

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

3、卷的继承和共享

  1. docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
  2. #docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu

运行u2继承u1
image.png
注:父类u1挂了以后,u2和宿主机之间依旧可以同步数据,u1重新恢复后,也可以从宿主机中获取到停止期间的文件数据。

注意:
Docker 挂载主机目录访问如果出现 cannot open directory : Permission denied
解决办法:在挂载目录后多加一个 —privileged=true 参数即可。centOS7安全模块比之前版本有加强,不安全的会先禁止,目录挂载被默认为不安全的行为。使用该参数,container内的root拥有真正的root权限,否则container内的root只是外部的一个普通用户权限。