docker学习:docker容器数据卷

是什么

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

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

一句话:有点像我们Redis里面的rdb和aof文件

能干吗

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

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

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

数据卷

容器内添加

  • 直接命令添加
  • 命令
    docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
  • 查看数据卷是否挂载成功
  • 容器和宿主机之间数据共享
  • 容器停止退出后,主机修改后数据是否同步
  • 命令(带权限)
    docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
  • DockerFile添加
  • 根目录下新建mydocker文件并进入
  • 可在dockerfile中使用volume命令来给镜像添加一个或多个数据卷
  • file构建
vim Dockerfile
#volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finisher,---------success1"
CMD /bin/bash
  • build后生成镜像
    docker build -f /mydocker/Dockerfile -t jie/centos .
    • -f 后面代表的是你的file所在目录
    • -t 代表的是你这个镜像的名字
    • . 代表当前目录
  • run容器
    docker run -it jie/centos
  • 通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址在呢??
    • docker inspect 容器ID

特殊情况

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

数据卷容器

  • 是什么
    命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据容器
    活动硬盘上面挂活动硬盘实现数据的传递
  • 总体介绍
  • 以上一步新建的镜像为模板并运行容器
  • 他们已经具有了容器卷
  • 容器间传递共享(–volumes-from)
  • 先启动一个容器dco1
  • dc02/dc03继承dc01
    • –volumes-from
    • docker run -it –name dc02 –volumes-from dc01 jie/centos

Original: https://www.cnblogs.com/carl-/p/15686559.html
Author: Carl-
Title: docker学习:docker容器数据卷

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/683875/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球