• 【微服务容器化】第三章-Docker容器的数据卷是什么


    🍃3.1 数据卷概念及作用

    思考几个问题:

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

    在这里插入图片描述

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

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

    在这里插入图片描述

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

    • 容器之间想要进行数据交互?

    在这里插入图片描述

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

    3.1.1 数据卷概念

    ​ 1)数据卷是宿主机中的一个目录或文件

    ​ 2)当容器目录和数据卷目录绑定后,对方的修改会立即同步

    ​ 3)一个数据卷可以被多个容器同时挂载

    ​ 4)一个容器也可以被挂载多个数据卷

    3.1.2 数据卷的作用

    ​ 1) 容器数据持久化

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

    ​ 3) 容器之间数据交换

    🍃3.2 配置数据卷

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

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

    注意事项:

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

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

    3. 可以挂载多个数据卷

    在这里插入图片描述

    3.2.1 演示数据卷持久化

    创建容器c1并且挂载/root/data/root/data_container

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

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

    在这里插入图片描述

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

    [root@centos7 ~]# docker stop c1
    
    • 1

    在这里插入图片描述

    结果:宿主机目录还在

    删除容器c1

    [root@centos7 ~]# docker rm c1
    
    • 1

    在这里插入图片描述

    结果:宿主机目录还在

    重新恢复c1

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

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

    在这里插入图片描述

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

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

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

    docker run -it --name=c2 \ 
    
    -v ~/data2:/root/data2 \ 
    
    -v ~/data3:/root/data3 \ 
    
    centos:7 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    \表示换行

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

    在这里插入图片描述

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

    在这里插入图片描述

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

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

    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
    
    • 1
    • 2

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

    🍃3.3 配置数据卷容器

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

    在这里插入图片描述

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

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

    docker inspect c3 #查看c3
    
    • 1

    在这里插入图片描述

    1. 创建启动 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
    
    • 1
    • 2
    • 3

    ​ c1创建数据,c2同步:

    在这里插入图片描述

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

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

    在这里插入图片描述

    在这里插入图片描述

    数据卷小结

    1. 数据卷概念

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

      • 容器数据持久化

      • 客户端和容器数据交换

      • 容器间数据交换

    3.数据卷容器

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

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

  • 相关阅读:
    力扣202-快乐数——哈希集合
    Jmeter快速入门
    算法训练优化的经验:深入任务与数据的力量
    36.一文讲透JavaScript日期对象Date,时间戳、1970、date方法、date计算
    UE4 局域网联机案例
    Python中的装饰器(Decorator)
    队列:C++实现
    【Docker】常用命令
    微信小程序设计规范
    虚拟列表的原理
  • 原文地址:https://blog.csdn.net/mjh1667002013/article/details/127597435