zoukankan      html  css  js  c++  java
  • Docker 之数据卷

    一 Docker 数据卷简介

    1.1 为什么用数据卷

    •宿主机无法直接访问容器中的文件

    •容器中的文件没有持久化,导致容器删除后,文件数据也随之消失

    •容器之间也无法直接访问互相的文件

    为解决这些问题,docker加入了数据卷(volumes)机制,能很好解决上面问题,以实现:

    •容器与主机之间、容器与容器之间共享文件

    •容器中数据的持久化

    •将容器中的数据备份、迁移、恢复等

    1.2 数据卷的特点

    •数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。

    •数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换。

    •容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。

    •容器对数据卷的修改是实时进行的。

    •数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会有相互影响。

    二 Docker 数据卷管理

    2.1 Docker挂载容器数据卷的三种方式

    bind mounts:将宿主机上的一个文件或目录被挂载到容器上。

    volumes:由Docker创建和管理。使用docker volume命令管理

    tmpfs mounts:tmpfs 是一种基于内存的临时文件系统。tmpfs mounts 数据不会存储在磁盘上。

    image-20200331005319623

    2.2 bind mounts方式挂载数据卷

    1
    2
    3
    4
    5
    6
    7
    8
    # 利用docker run/create的参数为容器挂载数据卷
    # 用法:
    方式一: -v, --volume参数
    -v 宿主机文件或文件夹路径:容器中的文件或者文件夹路径
    方式二:--mount参数
    --mount type=bind, src=宿主机文件或文件夹路径, dst=容器中的文件或者文件夹路径
    注意:src指定的文件和路径必须提前创建或存在
    # 命令演示:

    image-20200331005414662

    2.3 volumes方式挂载数据卷

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 利用docker run/create为容器挂载数据卷
    # 用法:
    方式一: -v, --volume参数
    -v VOLUME-NAME:容器中的文件或者文件夹路径
    方式二:--mount 参数
    --mount type=volume, src=VOLUME-NAME, dst=容器中的文件或者文件夹路径
    # volume对象管理:
    docker volume 命令管理volume数据卷对象
    docker volume create 创建数据卷对象
    docker volume inspect 查看数据卷详细信息
    docker volume ls 查看已创建的数据卷对象
    docker volume prune 删除未被使用的数据卷对象
    docker volume rm 删除一个或多个数据卷对象

    2.4 tmpfs mount方式挂载数据卷

    1
    2
    3
    # 利用docker run/create为容器挂载数据卷
    # 用法:
    --mount type=tmpfs, dst=PATH

    2.5 共享其他容器的数据卷-数据卷容器

    1
    2
    3
    # 利用docker run/create 的--volumes-from参数指定数据卷容器
    # 用法:
    docker run/create --volumes-from CONTAINER

    三 Docker 数据卷注意事项

    Docker的数据卷更多会是使用volumes方式来进行使用。使用时需注意:

    ​ •如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。

    ​ •如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。

    这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。

  • 相关阅读:
    用 Java 通过串口发送手机短信(二)简单使用
    jquery.lazyload.js实现图片延迟加载——wordpress图片随滚动条渐显效果
    java的mysql连接池
    html5客户端本地存储之sessionStorage及storage事件
    flash chart(amCharts的破解)
    实现igoogle效果的两种方法比较
    “SQL Server (SQL2005) 服务因 126 (0x7E) 服务性错误而停止”的解决方法 
    一个超简单的方法验证文本框中内容的数据类型
    我的对联
    Ajax调用后类方法时报”对象未定义“错误解决方法
  • 原文地址:https://www.cnblogs.com/bubu99/p/13763354.html
Copyright © 2011-2022 走看看