您现在的位置是:首页 >技术杂谈 >docker系列-四-————容器数据卷网站首页技术杂谈

docker系列-四-————容器数据卷

bote798 2025-02-11 12:01:03
简介docker系列-四-————容器数据卷

docker系列(四)————容器数据卷

1、容器数据卷介绍。

​ docker容器在产生数据的时候,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除之后,数据自然而然的也会消失。为了能保存数据,容器中引用了数据卷的概念。

2、作用以及特点。

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

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

它还存在以下几种特点:

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

再说简单点:方便我们将数据导出来,在删除原本的容器后将其中可用的数据与新的容器对接。

比如 容器a的数据目录挂载在宿主机home下,两处数据同步,a删除后,直接将b新建容器的数据目录再挂载在宿主机home下,同步数据,便能少去数据复刻步骤

3、使用数据卷。

(1):直接使用 -v 命令挂载

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

创建一个centos容器,并且打开其终端界面,然后将容器centos系统的/home目录挂载到宿主机的/home/test01上

docker run -it -v /home/test01:/home centos /bin/bash

另外打开一个终端查看宿主机home路径下是否出现test01目录,这个test01目录,就是我们刚启动容器centos的home目录,并且,此时这两个目录是同步的状态,我们在home目录中写入任何新的文件,都会同步到宿主机/home/test01下,注意是双向同步的。

(2):测试同步

# 在宿主机或容器的终端创建一个测试文本
echo "tong bu" > home/test.txt
# 查看一下另一端的目录下是否有文本文件

当然,我们可以使用更简单的方法查看是否挂载成功

首先记住这个命令

docker inspect 容器ID
# 该命令会返回一个包含所选容器的所有相关数据的 JSON 对象,包括配置、网络设置、挂载点等。

我们找到Mounts,它代表着挂载,type是类型(绑定),source是源(/home/test01),也就是把什么挂载到哪里。destination(home)就是挂载的目标路径了。

在这里插入图片描述

这里bote只演示修改容器内文件同步到宿主机挂载文件。反过来也是一样的,这里就不再赘述了。之后如果要修改容器内挂载文件,只需在我们本地挂载点修改就好了,它会自动同步到docker。

##### 更改方法将在下一篇文章补充给大家。
4、具名挂载与匿名挂载。

首先记住这个

docker volume ls #查看所有卷的情况。
(1)匿名挂载

我们首先使用匿名挂载的命令启动一个容器。

docker run -d -P --name=nginx02 -v /etc/nginx nginx

然后使用docker volume ls 查看,那一长串就是挂载到宿主机的名字。

# less 在信息输出过多的时候使用
docker inspect (容器ID) | less

然后输入/Mounts, “ / ”后是你想查到的内容
大家仔细看一下,是不是/etc/nginx就是那一长串,挂载到了我/var/lib…路径下,复制一下路径去看一下即可。

在这里插入图片描述

(2)具名挂载

具名挂载就很简单了,与匿名挂载类似

同样,我们使用具名挂载的方式启动一个容器。

docker run -d -P --name=nginxt04 -v jumingguazai:/etc/nginx nginx
docker volume ls 查看卷
docker inspect ID | less 找到挂载点。

在这里插入图片描述

这时我们发现它的Name:jumingguazai,这个也就是我们设置的挂载名

这就是具名挂载。

(3)如何确定是具名挂载还是匿名挂载
-v  容器内路径               # 匿名挂在
-v  卷名:容器内路径          # 具名挂在
-v  /宿主机路径:容器内路径    # 指定路径挂载
# 通过 -v 容器内路径  :ro   rw   可以改变读写权限
# 注意修改需要移除 docker rm 容器名
ro  readonly   #只读
rw  readwrite  #可写可读
例: docker run -d --name=nginx01 -v test01:/etc/nginx:ro nginx
   	docker run -d --name=nginx01 -v test01:/etc/nginx:rw nginx

最后

好的,大家下期 Dockerfile 再见。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。