• docker(六)数据挂载之数据卷


    docker容器运行时,是有一个可写入层的,如果我们把容器运行时的数据写在可写入层,会有以下问题:

    当容器停止运行时,写入的数据会丢失。你也很难将这些数据从容器中取出来给另外的应用程序使用。
    容器的可写入层与宿主机是紧密耦合的。这些写入的数据在可以轻易地被删掉。
    写入容器的可写入层需要一个存储驱动(storage driver)来管理文件系统。这个存储驱动通过linux内核提供了一个union filesystem。相比于数据卷(data volume),这种额外的抽象会降低性能。

    Docker提供了3种方法将数据从Docker宿主机挂载(mount)到容器:

    在这里插入图片描述

    Volumes由Docker管理,存储在宿主机的某个地方(在linux上是/var/lib/docker/volumes/)。非Docker应用程序不能改动这一位置的数据。Volumes是Docker最好的数据持久化方法。
    Bind mounts的数据可以存放在宿主机的任何地方。数据甚至可以是重要的系统文件或目录。非Docker应用程序可以改变这些数据。
    tmpfs mounts的数据只存储在宿主机的内存中,不会写入到宿主机的文件系统。(可用来存放会过时的敏感数据)

    1、数据卷Volumes

    数据卷可以在容器之间共享和重用,且容器停止或删除后数据卷不受影响,且对数据卷的改动是立即生效的,更新数据卷之后不会影响镜像。
    创建数据卷命令:

    docker volume create my-volume 
    
    • 1

    查看数据卷:

    docker volume ls
    
    • 1

    查看指定数据卷的信息:

    docker volume inspect my-volume 
    
    • 1

    删除数据卷:

    docker volume rm my-volume 
    
    • 1

    清理无主的数据卷:

    docker volume prune
    
    • 1

    2、挂载数据卷到容器

    在docker run的时候,参数–mount默认情况下用来挂载volume。在一次docker run中可以挂载多个数据卷。
    当然 -v也行,我们参考上篇文章启动私有仓库的命令:

    docker run -d -v /data/registry:/var/lib/registry -p 5000:5000 --name myRegistry registry
    
    • 1

    如果是–mount的话,命令如下:

    docker run -d --mount type=bind source=/data/registry,target=/var/lib/registry -p 5000:5000 --name myRegistry registry
    
    • 1

    -v会创建文件夹,–mount不会,无文件夹的话会报错。
    type=bind表示以Bind mounts方式挂载数据卷,-v默认是以Bind mounts方式挂载数据卷,非Doc
    ker应用程序可以更改数据。

  • 相关阅读:
    在 Idea 中配置远程 tomcat 并部署
    map、odom、base_link、laser 的理解 及其 tf 树的理解
    大模型提示工程之Prompt框架和示例
    扫雷(蓝桥杯)
    海豚调度器集群安装DolphinScheduler(3.1.8)
    Android 3D Launcher锁定IMU界面
    vue2的基础知识巩固
    USACO Training 1.4 Barn Repair
    【概率与统计】聊聊一些常见的概率分布
    《深入理解Java虚拟机》读书笔记--第一部分走进java
  • 原文地址:https://blog.csdn.net/liwangcuihua/article/details/126231564