新手入门 - 3. Docker 容器的数据卷

52 阅读3分钟

一、数据卷概念及作用

数据卷概念

image.png

数据卷作用

image.png

二、配置数据卷

  • 创建启动容器时,使用 -v参数设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件) ...
  • 注意事项:
  1. 目录必须是绝对路径。
  2. 如果目录不存在,则会自动创建。
  3. 可以挂载多个数据卷(一个-v挂载一个)。

2.1 演示容器数据持久化

演示: image.png 查看宿主机,有个空的 data 文件夹: image.png 查看容器 image.png

演示:宿主机中的数据卷的改动 --> 容器中数据卷的改动

宿主机:创建了一个 Test.txt 文件 image.png

容器:相应的也出现了这个文件 image.png

演示:容器中数据卷的改动 --> 宿主机中的数据卷的改动

容器:写入了 HelloWorld: image.png 宿主机:相应的文件也写入了 HelloWorld: image.png

演示:删除容器后 --> 宿主机中的挂载数据卷还存在

删除容器: image.png 查看宿主机数据卷:数据卷依然存在 image.png

演示:宿主机数据卷挂载到新容器后,容器中的数据卷是否存在

创建启动容器,挂载数据卷: image.png 查看容器中数据卷:文件依然存在 image.png

2.2 演示一个容器挂载多个数据卷

创建容器 c3 挂载多个数据卷data2和data3: image.png 在容器中查看: image.png

2.3 演示容器之间的数据交换

多个容器挂载同一个数据卷即可实现容器之间的数据交换: image.png

下面为演示: 创建容器c4,挂载宿主机的data目录: image.png 创建容器c5,同样挂载宿主机的data目录: image.png 现在在容器c5里,往 Test.txt 文件中追加 HelloJava!!: image.png 查看容器c4,其 Test.txt 中也被追加了文本: image.png

此刻,实现了不同容器之间的数据交换。

三、配置数据卷容器

3.1 数据卷容器

多容器进行数据交换有两种方式:

  1. 多个容器挂载同一个数据卷(已讲过)
  2. 数据卷容器(接下来要讲)

数据卷容器c3挂载数据卷,然后容器c1、c2分别再挂载到数据卷容器c3上: image.png 此效果跟容器c1、c2 分别挂载到数据卷是一样的: image.png 因为容器c1、c2、c3 都挂载到了同一个数据卷,因此这些容器是可以相互通信的。

3.2 配置数据卷容器

  1. 创建启动c3数据卷容器,使用 -v参数设置数据卷
docker run -it --name=c3 -v /volume ubuntu /bin/bash

image.png此处只设置了容器中数据卷存放的位置,未写宿主机目录,系统会使用默认的目录。

  1. 创建启动 c1、c2 容器,使用 --volumes-from(让其他容器继承该容器)参数设置数据卷
docker run -it --name=c1 --volumes-from c3 ubuntu /bin/bash
docker run -it --name=c2 --volumes-from c3 ubuntu /bin/bash

上面命令的效果如图: image.png

演示: 创建启动c3数据卷容器: image.png 该容器中存在目录 volume: image.png 创建启动 c1、c2 容器 image.png image.png 容器中存在目录 volume: image.png

此刻,容器c1、c2、c3 之间就通了。

通过 inspect命令查看容器信息: 以下分别为 c1、c2、c3 容器信息: image.png image.png image.png 可以看到他们挂载的都是同一个数据卷。