关于Docker你不知道的那些事之Docker容器数据卷

前言

这篇博文介绍的是Docker容器数据卷,关于这部分内容也许是我们学习和使用docker的核心知识。学习了这部分知识,我们就可以制作自己的将镜像,运行自己定制的容器,可以随自己的需要任意使用docker,实实在在的解决我们的工作痛点,提高我们的工作效率,这就是docker技术存在的意义。
有需要的同学可以了解一下这篇文章,谢谢。

是什么?

Docker的理念

  • 将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
  • 容器之间希望有可能共享数据

Docker容器产生的数据,如果不通过Docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了
为了能保存数据在docker中我们使用卷

一句话:有点类似我们redis里面的rdb和aof文件

能干嘛

  • 容器的持久化
  • 容器间继承+共享数据

卷就是目录或文件,存在于一个或多个容器中,有docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File system 提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂在的数据卷

  • 数据卷可在容器之间共享或重用数据,也可以完成容器与主机之间的数据共享。
  • 卷中的更改可以直接生效
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用它为止

docker cp 从容器内拷贝文件到主机上

数据卷(在容器内添加)

方式

  • 直接命令添加
  • DockerFile添加

直接命令添加

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

  • 查看数据卷是否挂载成功

  • 容器和宿主机之间数据共享
    在这里插入图片描述

  • 容器停止退出后,主机修改后数据是否同步
    在这里插入图片描述

  • 命令(带权限)

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

  • ro:只读
    在这里插入图片描述

docker inspect 获取容器/镜像的元数据。

docker inspect是docker客户端的原生命令,用于查看docker对象的底层基础信息。包括容器的id、创建时间、运行状态、启动参数、目录挂载、网路配置等等。另外,该命令也可以用来查看docker镜像的信息。

docker inspect [OPTIONS] NAME|ID [NAME|ID…]
OPTIONS说明:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
–type :为指定类型返回JSON。

# 查看redis:latest镜像信息
docker inspect --type=image redis

# 查看redis容器信息
docker inspect redis

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

DockerFile添加

  • 根目录下新建mydocker文件夹并进入

  • 可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
    在这里插入图片描述

  • File构建

    # volume test
    FROM centos
    VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
    CMD echo "finised,---------success1"
    CMD "/bin/bash"
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5

    翻译一下,大致是以下意思:

      docker run -it -v /host1:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 /bin/bash
    
        
       
    • 1
  • build后生成镜像:获得了一个新的镜像【zzyy/centos】
    在这里插入图片描述

  • run容器

在这里插入图片描述

  • 通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址哪??

在这里插入图片描述

  • 主机对应默认地址
    使用docker inspect [IMAGE_ID]
    在这里插入图片描述

数据卷容器

是什么

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

总体介绍

  • 以上一步新建的镜像zzyy/centos为模板并运行容器dc01/dc02/dc03
  • 它们已经具有容器卷:/dataVolumeContainer1和/dataVolumeContainer2

容器间传递共享(–volumes-from)

  • 先启动一个父容器dc01:在dataVolumeContainer2新增内容

  • dc02/dc03继承dc01
    –volumes-from :继承
    命令:dc02/dc03分别在dataVolumeContainer2各自新增内容
    在这里插入图片描述

  • 回到dc01可以看到02/03各自添加的都能共享了

  • 删除dc01,在dc02修改后dc03可否访问
    可以访问,父容器dc01删除之后,子容器dc02和dc03也可以进行数据共享。

  • 删除dc02后dc03可否访问 --可以访问

  • 新建dc04继承dc03后再删除dc03 --可以访问

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

总结

欢迎点赞加关注,谢谢!!!!

文章来源: blog.csdn.net,作者:轻狂书生FS,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/LookForDream_/article/details/111190631

(完)