第3章 Docker容器的数据卷

Mr.Tong...
  • Docker
  • Docker
大约 4 分钟

📖3.1 数据卷概念及作用

思考几个问题:

Docker 容器删除后,在容器中产生的数据还在吗?

不在,所以容器中的数据想要持久化该怎么办?

shadow

Docker 容器和外部机器可以直接交换文件吗?

不可以,但是宿主机与容器是有联系的,我们可以通过直接访问宿主机,从而间接访问容器达到文件交换。

shadow

那容器之间想要进行数据交互怎么办?

可以通过挂载相同数据卷进行实现。

shadow

✅数据卷概念

数据卷是宿主机中的一个目录或文件 。当容器目录和数据卷目录绑定后,对方的修改会立即同步 。

  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

✅ 数据卷的作用

​ 1) 容器数据持久化

​ 2) 外部机器和容器间接通信

​ 3) 容器之间数据交换

📖3.2 配置数据卷

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

[root@centos7 ~]# docker run ... –v 宿主机目录(文件):容器内目录(文件) ... 

注意事项:

  1. 容器目录必须是绝对路径

  2. 如果目录不存在,会自动创建

  3. 可以挂载多个数据卷

shadow

✅演示数据卷持久化

第一步:创建容器c1并且挂载/root/data/root/data_container

[root@centos7 ~]# docker run -it c1 -v /root/data:/root/data_container centos:7 /bin/bash

在/root/data_container下随便创建一个文件b.txt

shadow

第二步:关闭容器,可以看到数据卷数据文件还在

[root@centos7 ~]# docker stop c1

shadow

结果显示宿主机目录还在

第三步: 删除容器c1

[root@centos7 ~]# docker rm c1

shadow

结果显示宿主机目录还在

第四步:重新恢复c1

[root@centos7 ~]# docker run -it c1 -v ~/data:/root/data_container centos:7 /bin/bash

注意在容器中不能写~,第一个~代表root

shadow

结果恢复后发现容器中的数据还在

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

第一步:创建一个容器c2的centos7,同时挂载两个数据卷

docker run -it -name=c2 \ 

-v ~/data2:/root/data2 \ 

-v ~/data3:/root/data3 \ 

centos:7 

\表示换行

​ 1) 在容器中的data3中创建一个文件

shadow

​ 2)在宿主机中查看是否同步

shadow

结果跟我们预想的一样,是同步显示的。

✅ 演示两个容器挂载同一个数据卷

docker run -it --name=c3 -v /root/data:/root/data_container centos:7 /bin/bash 
docker run -it --name=c4 -v /root/data:/root/data_container centos:7 /bin/bash

在一个容器中修改文件,看到另一个容器也跟着 ,结果同上个演示。

📖3.3 配置数据卷容器

多容器进行数据交换,多个容器挂载同一个数据卷容器,完成数据交互

shadow

第一步:创建启动c3数据卷容器,使用 –v 参数 设置数据卷

docker run –it --name=c3 –v /volume centos:7 /bin/bash

这里没有指定宿主机目录,默认生成一个宿主机目录

docker inspect c3 #查看c3

shadow

第二步: 创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷

docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash 

docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

​ c1创建数据,c2同步:

shadow

​ 使用 c3数据卷容器创建c1,c2,这时即使c3关闭不影响c3,c4交互 。

​ 测试:关闭c3,在c2中添加文件,c1查看

shadow

shadow

数据卷小结

  1. 数据卷概念

    • 宿主机的一个目录或文件
  2. 数据卷作用

    • 容器数据持久化

    • 客户端和容器数据交换

    • 容器间数据交换

3.数据卷容器

  • 创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from )。

  • 通过简单方式实现数据卷配置

你认为这篇文章怎么样?

  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.14.1