Docker学习记录|关于Docker你不知道的那些事之Docker容器数据卷


Docker容器数据卷

  • 前言
  • 是什么?
    • Docker的理念
  • 能干嘛
  • 数据卷(在容器内添加)
    • 方式
    • 直接命令添加
    • DockerFile添加
  • 数据卷容器
    • 是什么
    • 总体介绍
    • 容器间传递共享(--volumes-from)
  • 总结

前言
这篇博文介绍的是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学习记录|关于Docker你不知道的那些事之Docker容器数据卷
    文章图片

  • 容器停止退出后,主机修改后数据是否同步
    Docker学习记录|关于Docker你不知道的那些事之Docker容器数据卷
    文章图片

  • 命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
解释
  • ro:只读
    Docker学习记录|关于Docker你不知道的那些事之Docker容器数据卷
    文章图片
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

DockerFile添加
  • 根目录下新建mydocker文件夹并进入
  • 可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
    Docker学习记录|关于Docker你不知道的那些事之Docker容器数据卷
    文章图片

  • File构建
    # volume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finised,---------success1" CMD "/bin/bash"

    翻译一下,大致是以下意思:
    docker run -it -v /host1:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 /bin/bash

  • build后生成镜像:获得了一个新的镜像【zzyy/centos】
    Docker学习记录|关于Docker你不知道的那些事之Docker容器数据卷
    文章图片

  • run容器
Docker学习记录|关于Docker你不知道的那些事之Docker容器数据卷
文章图片

  • 通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址哪??
【Docker学习记录|关于Docker你不知道的那些事之Docker容器数据卷】Docker学习记录|关于Docker你不知道的那些事之Docker容器数据卷
文章图片

  • 主机对应默认地址
    使用docker inspect [IMAGE_ID]
    Docker学习记录|关于Docker你不知道的那些事之Docker容器数据卷
    文章图片
数据卷容器 是什么
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
总体介绍
  • 以上一步新建的镜像zzyy/centos为模板并运行容器dc01/dc02/dc03
  • 它们已经具有容器卷:/dataVolumeContainer1和/dataVolumeContainer2
容器间传递共享(–volumes-from)
  • 先启动一个父容器dc01:在dataVolumeContainer2新增内容
  • dc02/dc03继承dc01
    –volumes-from :继承
    命令:dc02/dc03分别在dataVolumeContainer2各自新增内容
    Docker学习记录|关于Docker你不知道的那些事之Docker容器数据卷
    文章图片

  • 回到dc01可以看到02/03各自添加的都能共享了
  • 删除dc01,在dc02修改后dc03可否访问
    可以访问,父容器dc01删除之后,子容器dc02和dc03也可以进行数据共享。
  • 删除dc02后dc03可否访问 --可以访问
  • 新建dc04继承dc03后再删除dc03 --可以访问
  • 结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
总结
欢迎点赞加关注,谢谢!!!!

    推荐阅读