四、Docker容器数据卷

数据卷介绍

数据卷(Data Volumes)是宿主机中的一个目录或文件,数据卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。当容器目录和数据卷目录绑定后,对方的修改会立即同步,一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷。

在这里插入图片描述
数据卷的作用

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

配置数据卷

创建启动容器时,使用-v参数 设置数据卷

docker run ... -v 宿主机目录(文件):容器内目录(文件) ...

注意事项:

  1. 目录必须是绝对路径
  2. 如果目录不存在,会自动创建
  3. 可以挂载多个数据卷

比如我要创建一个myRedis镜像的容器,并创建数据卷:

docker run -it --name=myredis -v /root/data:/root/data_container myredis:latest /bin/bash

创建完毕后,在主机的/root目录下出现了data目录,而在容器的/root目录下出现了data_container目录。

然后在主机上创建一个a.txt

在这里插入图片描述
发现容器的data_container目录下也多了一个a.txt文件:

在这里插入图片描述将容器关闭并删除之后,文件依然在。

然后使用docker run -it --name=myredis -v /root/data:/root/data_container myredis:latest /bin/bash重新起一个容器,发现容器中的a.txt文件又回来了:

在这里插入图片描述

一个容器挂载多个目录

docker run -it --name=myredis \
-v ~/data2:/root/data2 \
-v ~/data3:/root/data3 \
myredis:latest \
/bin/bash

查看容器的/root/data目录,发现多了两个目录:

在这里插入图片描述
主机的/root/data目录下也多了两个目录:

在这里插入图片描述

两个容器通过挂载同一个目录共享数据

容器1:

docker run -it --name=myredis1 \
-v ~/data:/root/data \
myredis:latest \
/bin/bash

容器2:

docker run -it --name=myredis2 \
-v ~/data:/root/data \
myredis:latest \
/bin/bash

可以看到,两个容器和主机的/root目录下都多了一个data目录:

在这里插入图片描述在这里插入图片描述在这里插入图片描述
接着,我们在容器1的data目录下创建一个a.txt,并向文件中写入一个’‘hello’'字符串:

在这里插入图片描述然后在容器2中可以发现刚刚在容器1中创建的内容:

在这里插入图片描述

配置数据卷容器

多容器如何进行数据交互,在上面我们使用的是多个容器挂载同一个数据卷的方式,其实还有一种方式,就是创建数据卷容器

比如现在有三个容器:c1、c2和c3,现在我们将c3挂载一个数据卷,然后将c1和c2分别挂载到c3上面,这个时候就相当于c1与c2同时挂载到了数据卷上,可以进行数据共享(即使c3出问题宕机了,c1和c2依然能正常完成数据共享),此时c3就被称为数据卷容器。

在这里插入图片描述

首先启动c3数据卷容器,使用-v参数设置数据卷:

docker run -it --name=c3 -v ~/data:/root/volume myredis:latest /bin/bash

然后创建启动c1、c2容器,使用--volumes-from参数设置数据卷:

docker run -it --name=c1 --volumes-from c3  myredis:latest /bin/bash

docker run -it --name=c2 --volumes-from c3  myredis:latest /bin/bash

创建完毕后,我们首先在c1容器的/root/volume目录下创建一个b.txt,并在里面写入"docker"字符串:

在这里插入图片描述然后在c2中可以发现刚刚在c1中创建的内容:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_49723651/article/details/126815682
今日推荐