文章目录

  • 一、数据卷是什么
  • 二、数据卷可以做什么
  • 1、容器的持久化
  • 2、容器之间继承+共享我们的数据
  • 三、数据卷添加
  • 1、直接启动时命令添加(有权限修改)
  • 2、直接启动时命令添加(无权限修改,之后读)
  • 3、DockerFile添加
  • (1)指令
  • (2)DockerFile构建
  • (2)构建镜像
  • (3)run 运行,我们的容器
  • (4)查找我们主机的文件地址
  • 4、备注:出现cannot open directory解决方案
  • 四、数据卷容器
  • 是什么
  • 数据卷的共享操作
  • 数据卷的生命周期


一、数据卷是什么

按照阳哥话,就是一个U盘,提供给我们docker容器使用,使我们的docker 可以与宿主机共享数据,操作时同时进行的,同样类似于我们的redis的rdb和aof文件,用来持久化我们的数据

二、数据卷可以做什么

1、容器的持久化

我们容器在运行时,会产生出我们的数据,当我们关闭时,我们的容器数据需要持久化起来,就像redis的数据运行在我们的内存中,但是当我们关闭redis时,我们redis就会把内存中的数据保存到我们aof文件中,和我们的rdb文件中。

2、容器之间继承+共享我们的数据

我们的容器可以创建出一个容器,继承我们的容器,同理容器之间的数据就会共享我们的数据。

三、数据卷添加

1、直接启动时命令添加(有权限修改)

命令

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

容器创建后如何进行挂载 容器挂载是什么意思_容器创建后如何进行挂载

查看是否挂载成功

执行命令 docker inspect id 查看容器内部细节

容器创建后如何进行挂载 容器挂载是什么意思_redis_02


之后我们在宿主机和容器之间就可以使用各自对应的文件夹进行数据的共享。

即使我们的容器退出,关闭了,我们在宿主机上的修改同样会导致我们的容器启动时看到一样的修改,因为就像一个U盘

一样,当我们修改U盘的内容时,我们U盘的数据,和在机器上查看数据的机器一样是都是被修改的数据。

2、直接启动时命令添加(无权限修改,之后读)

在启动时加上ro,表示ready only

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

3、DockerFile添加

(1)指令

使用value指令给镜像添加一个或者多个容器卷

VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

说明

出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。
由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录

(2)DockerFile构建

添加三个挂载点(相当于三个USB接口)

FROM centos
VALUE ["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
CMD echo "finished,--------success1"
CMD /bin/bash

(2)构建镜像

注意那个最后的标点“.”,千万不能忘了
-t 意思是在当前目录下寻找标准命名的DockerFile文件,执行那个构建,也可以使用-f 指定文件的绝对路径

docker build -t zdk/centos .

(3)run 运行,我们的容器

docker run -it zdk/centos

(4)查找我们主机的文件地址

docker inspect 查找我们的容器的挂载点绑定的位置

容器创建后如何进行挂载 容器挂载是什么意思_redis_03

4、备注:出现cannot open directory解决方案

Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个–privileged=true参数即可

四、数据卷容器

是什么

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

就是我们首先创建一个挂载数据的父容器,通过这个父容器我们可以创建多个子容器,这些子容器同样可以挂载到父容器的数据,同样,无论那个子容器修改容器卷数据都会影响我们父容器的容器卷,其实,这些容器的数据卷都是同一个数据卷,(相当于一个U盘,同时插在多个电脑上,实现数据的共享)。

数据卷的共享操作

创建一个父容器,挂载数据卷

docker run -it  -v/mydocekFile:/usr/local/mydockerfilev centos

使用继承命令创建子容器
docekr --volumes -from id

我们的子容器会继承我们的父容器的所有,包括数据卷的共享

数据卷的生命周期

结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止