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

网友投稿 773 2022-05-29

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 run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

解释

ro:只读

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

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

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 --可以访问

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

总结

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

Docker Redis 容器

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:hadoop学习-倒排索引
下一篇:保姆级Mysql读写锁图文教程丨【绽放吧!数据库】
相关文章