• docker的数据存储


    概述

    Docker 为容器提供了两种存放数据的资源:由 storage driver 管理的镜像层和容器层;以及Data Volume

    store driver

    Docker镜像的分层结构如下图所示:

    image-20220603174448265

    容器由最上面一个可写的容器层,以及若干只读的镜像层组成,容器的数据就存放在这些层中。这样的分层结构最大的特性是 Copy-on-Write:新数据会直接存放在最上面的容器层。修改现有数据会先从镜像层将数据复制到容器层,修改后的数据直接保存在容器层中,镜像层保持不变。如果多个层中有命名相同的文件,用户只能看到最上面那层中的文件。

    分层结构使镜像和容器的创建、共享以及分发变得非常高效,而这些都要归功于 Docker storage driver。正是 storage driver 实现了多层数据的堆叠并为用户提供一个单一的合并之后的统一视图。

    Docker 支持多种 storage driver,有 AUFS、Device Mapper、Btrfs、OverlayFS、VFS 和 ZFS。它们都能实现分层的架构,同时又有各自的特性。优先使用 Linux 发行版默认的 storage driver。Docker 安装时会根据当前系统的配置选择默认的 driver。

    image-20220603174931109

    Data Volume

    Data Volume 本质上是 Docker Host 文件系统中的目录或文件,能够直接被 mount 到容器的文件系统中。Data Volume(数据卷)具有以下特点:1、Data Volume属于目录或文件 2、容器可以读写数据卷中的数据 3、即便容器被销毁,数据卷中的数据依旧存在。

    Data Volume类型
    • bind mount:容器内的数据被存放到宿主机文件系统的任意位置,甚至存放到一些重要的系统目录或 文件中。使用bind mounts的容器可以在通过容器内部的进程对主机文件系统进行修改,包括创建,修改和删除 重要的系统文件和目录,这个功能虽然很强大,但显然也会造成安全方面的影响,包括影响到宿主机上 Docker以外的进程。用法:docker run -v /宿主机绝对路径目录:/容器内目录 镜像名
    • Docker managed volume:docker managed volumebind mount 在使用上的最大区别是不需要指定 mount 源,指明 mount point 就行了
    Bind mount实践

    image-20220603203035864

    如上图所示,启动nginx容器并将data目录挂载到宿主机 /Users/docker 文件目录下。在nginx data目录下新建文件:touch test.txt。在宿主机/Users/docker目录下可以看到容器数据已经成功挂载:

    image-20220603204040882

  • 相关阅读:
    VUE3 Router学习 第二章 导航守卫(全局前置、后置守卫)、路由元信息(meta)、过渡动效、滚动行为(scrollBehavior)
    华为机试真题 C++ 实现【迷宫问题】
    C++新经典 | C++ 查漏补缺(概述)
    SPIR-V初窥
    一个实用批处理指令制作过程分享:Perforce更新完后打开VisualStudio再编译
    断言语句 assertion
    机器学习案例(七):产品需求预测
    数据结构实验6 :图的存储与遍历(邻接矩阵的深度优先遍历DFS和邻接表的广度优先遍历BFS)
    Reactor And Gev 详解 通俗易懂
    因为爱情而美
  • 原文地址:https://www.cnblogs.com/crstly/p/16340632.html