• 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应用程序可以更改数据。

  • 相关阅读:
    5个网络问题,了解网络协议栈的哪些不为人知的八股文(来波千人福利)
    van-list 遇到的问题
    海康多个相机如何提高同时取像
    html:mate
    实现一个极简的字节数组对象池
    Servlet入门
    【Designing ML Systems】第 5 章 :特征工程
    react设置代理
    10_9C++
    Hadoop大数据应用:Yarn 节点实现扩容与缩容
  • 原文地址:https://blog.csdn.net/liwangcuihua/article/details/126231564