当前位置:   article > 正文

Docker容器数据卷_docker数据卷

docker数据卷

介绍

Docker容器数据卷是一种特殊类型的目录,可以在容器和主机之间共享数据。当容器结束时,数据卷不会被删除,因此可以在其他容器中使用。数据卷可以被其他容器连接和共享,这使得容器之间的数据共享和持久保存变得更加容易。

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

一句话:有点类似我们Redis里面的rdb和aof文件,将docker容器内的数据保存进宿主机的磁盘中。

特点

将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的

Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。

为了能保存数据在docker中我们使用容器数据卷。

  1. 数据卷提供了可移植性:可以将数据卷挂载到多个不同的容器中,从而实现应用程序的可移植性。
  2. 数据卷支持数据的持久化:数据卷中的数据不会随着容器的删除而丢失,即使容器结束,数据依然存在于数据卷中。
  3. 数据卷可以被共享:容器之间可以共享同一个数据卷,这使得数据在容器之间的共享变得更加容易。
  4. 数据卷可以提高容器性能:通过将容器的数据卷挂载到主机上的目录或一个专用的容器上,可以大大提高容器的性能。

案例

容器和宿主机之间数据共享

公式

docker run -it -v /宿主机目录:/容器内目录 ubuntu /bin/bash

启动镜像

docker run -it --name u-ubuntu --privileged=true -v /tmp/hostData:/tmp/dockerData ubuntu /bin/bash

ubuntu容器中/tmp/dockerDat中的数据和主机/tmp/hostData中的数据会进行同步

在/tmp/dockerDa创建dockerin.txt文件

image-20230714215137982

查看主机/tmp/hostData是否存在该文件

image-20230714215145818

在**/tmp/hostData存在dockerin.txt**

在主机/tmp/hostData创建hostin.txt文件

image-20230714215202307

查看容器中/tmp/dockerDa是否存在hostin.txt文件

image-20230714215210974

实现了容器和宿主机之间的数据同步

查看数据卷是否挂载成功

docker inspect 容器ID

docker inspect c6508161a32a

image-20230714215320826

其中Mounts中显示绑定信息

image-20230714215330169

容器和宿主机之间数据共享详细验证

1 docker修改,主机同步获得

docker容器中修改dockerin.txt

image-20230714215352607

查看主机中dockerin.txt

image-20230714215400978

同步成功

2 主机修改,docker同步获得

主机修改hostin.txt文件

image-20230714215416898

查看docket中的hostin.txt文件

image-20230714215424387

同步成功

3 docker容器stop,主机修改,docker容器重启看数据是否同步

停止docker容器

image-20230714215449602

主机修改内容

image-20230714215457607

docker容器启动

image-20230714215507274

进入正在运行的容器

image-20230714215515221

同步成功

读写规则映射添加说明

默认为读写权限

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

没有:rw的情况下,默认就是rw读写权限

设置为只读权限

容器实例内部被限制,只能读取不能写

docker run -it --name u-ubuntu --privileged=true -v /tmp/hostData:/tmp/dockerData:ro ubuntu /bin/bash

/容器目录:ro 镜像名 就能完成功能,此时容器自己只能读取不能写

ro = read only

此时如果宿主机写入内容,可以同步给容器内,容器可以读取到。但是无法写入内容。

删除docker容器

image-20230714215657396

启动docker容器,只有读权限

image-20230714215707720

卷的继承和共享

删除之前启动的docker容器

image-20230714215725275

容器1完成和宿主机的映射

重新创建并启动

docker run -it --privileged=true -v /tmp/host:/tmp/docker --name u1 ubuntu /bin/bash

容器创建a.txt

image-20230714215748995

主机同步成功

image-20230714215756683

主机创建b.txt

image-20230714215806713

容器同步成功

image-20230714215815856

容器2继承容器1的卷规则

docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu

image-20230714215833002

容器2创建c.txt

image-20230714215840958

主机同步成功
image-20230714215848654

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/283811
推荐阅读
相关标签
  

闽ICP备14008679号