• 四、Docker容器数据卷


    数据卷介绍

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

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

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

    配置数据卷

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

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

    注意事项:

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

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

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

    创建完毕后,在主机的/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
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

    在这里插入图片描述

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

    容器1:

    docker run -it --name=myredis1 \
    -v ~/data:/root/data \
    myredis:latest \
    /bin/bash
    
    • 1
    • 2
    • 3
    • 4

    容器2:

    docker run -it --name=myredis2 \
    -v ~/data:/root/data \
    myredis:latest \
    /bin/bash
    
    • 1
    • 2
    • 3
    • 4

    可以看到,两个容器和主机的/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
    
    • 1

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

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

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

    在这里插入图片描述

  • 相关阅读:
    HBase与Hive数据交互
    量子密钥分发网络方案研究
    基于Orange Pi AIpro的3D性能展示
    协程学习(二)--协程切换及调度
    基础-JavaSE面试题目
    Seata流程源码梳理下篇-TC
    web 网页开发学习 之 vsc 的快捷方式便捷使用
    c++中的函数
    【金融】探究财务报告业绩增速与股价变动之间的关系--研报复现及深入探究
    深度学习之使用Milvus向量数据库实战图搜图
  • 原文地址:https://blog.csdn.net/qq_49723651/article/details/126815682