管理Docker中的数据

默认情况下,在容器内创建的所有文件都存储在可写容器层中。这意味着:

  • 当该容器不再运行时,数据不会持久存在,如果另一个进程需要,则可能很难从容器中获取数据。
  • 容器的可写层紧密耦合到运行容器的主机。您无法轻松地将数据移动到其他位置。
  • 写入容器的可写层需要 存储驱动程序来管理文件系统。存储驱动程序使用Linux内核提供联合文件系统。与使用直接写入主机文件系统的数据卷相比,这种额外的抽象降低了性能 。

Docker有两个容器选项可以在主机中存储文件,因此即使在容器停止之后文件仍然存在:和 绑定挂载。如果在Linux上运行Docker,你也可以使用tmpfs mount

选择正确的安装类型

无论您选择使用哪种类型的安装,数据在容器中看起来都是相同的。它作为目录或容器文件系统中的单个文件公开。

可视化卷,绑定装载和tmpfs 装载之间差异的简单方法是考虑数据在Docker主机上的位置。

  • 卷存储在由Docker/var/lib/docker/volumes/在Linux上)管理的主机文件系统的一部分中。非Docker进程不应修改文件系统的这一部分。卷是在Docker中保留数据的最佳方式。

  • 绑定挂载可以存储在主机系统的任何位置。它们甚至可能是重要的系统文件或目录。Docker主机或Docker容器上的非Docker进程可以随时修改它们。

  • tmpfs挂载仅存储在主机系统的内存中,永远不会写入主机系统的文件系统。

有关安装类型的更多细节

  • :由Docker创建和管理。可以使用该docker volume create命令显式创建卷,或者Docker可以在容器或服务创建期间创建卷。

    创建卷时,它存储在Docker主机上的目录中。将卷装入容器时,此目录是装入容器的目录。这类似于绑定挂载的工作方式,除了卷由Docker管理并与主机的核心功能隔离。

    给定的体积可以同时安装到多个容器中。当没有正在运行的容器正在使用卷时,该卷仍可供Docker使用,并且不会自动删除。可以使用删除未使用的卷docker volume prune

    装入卷时,可能会命名或匿名。匿名卷在首次装入容器时未给出明确的名称,因此Docker为它们提供了一个随机名称,该名称在给定的Docker主机中保证是唯一的。除名称外,命名和匿名卷的行为方式相同。

    卷还支持使用卷驱动程序,这些驱动程序允许您将数据存储在远程主机或云提供程序上,以及其他可能性。

  • 绑定mounts:自Docker早期开始提供。与卷相比,绑定装载具有有限的功能。使用绑定装入时,主机上的文件或目录将装入容器中。文件或目录由主机上的完整路径引用。该文件或目录不需要已存在于Docker主机上。如果它尚不存在,则按需创建。绑定挂载非常高效,但它们依赖于具有特定目录结构的主机文件系统。如果正在开发新的Docker应用程序,请考虑使用命名卷。无法使用Docker CLI命令直接管理绑定装入。

    绑定挂载允许访问敏感文件

    使用绑定装入的一个副作用,无论好坏,都可以通过容器中运行的进程更改主机文件系统 ,包括创建,修改或删除重要的系统文件或目录。这是一种强大的功能,可能会产生安全隐患,包括影响主机系统上的非Docker进程。

  • tmpfs mounts:tmpfs挂载不会保留在磁盘上,无论是在Docker主机上还是在容器中。它可以在容器的生命周期中由容器使用,以存储非持久状态或敏感信息。例如,在内部,swarm服务使用tmpfs挂载将秘密挂载到服务的容器中。

绑定装载和卷都可以使用-vor --volume标志装入容器,但每种装置的语法略有不同。对于tmpfs mounts,您可以使用该--tmpfs标志。但是,在Docker 17.06及更高版本中,建议--mount对容器和服务使用标志,对于绑定装入,卷或tmpfs装载,因为语法更清晰。

卷的好用例

卷是在Docker容器和服务中持久保存数据的首选方法。卷的一些用例包括:

  • 在多个运行容器之间共享数据。如果未显式创建它,则会在第一次将其装入容器时创建卷。当该容器停止或被移除时,该卷仍然存在。多个容器可以同时安装相同的卷,可以是读写也可以是只读。仅在明确删除卷时才会删除卷。

  • 当Docker主机不能保证具有给定的目录或文件结构时。Volumes可帮助您将Docker主机的配置与容器运行时分离。

  • 如果要将容器的数据存储在远程主机或云提供程序上,而不是本地存储。

  • 当需要备份,还原或将数据从一个Docker主机迁移到另一个Docker主机时,卷是更好的选择。可以使用卷停止容器,然后备份卷的目录(例如/var/lib/docker/volumes/<volume-name>)。

绑定挂载的良好用例

通常,应该尽可能使用卷。绑定适用于以下类型的用例:

  • 将配置文件从主机共享到容器。这就是Docker默认通过/etc/resolv.conf从主机安装到每个容器中来为容器提供DNS解析的方式 。

  • 在Docker主机上的开发环境和容器之间共享源代码或构建工件。例如,可以将Maven target/ 目录安装到容器中,每次在Docker主机上构建Maven项目时,容器都可以访问重建的工件。

    如果以这种方式使用Docker进行开发,您的生产Dockerfile会将生产就绪工件直接复制到映像中,而不是依赖于绑定装载。

  • 当Docker主机的文件或目录结构保证与容器所需的绑定装载一致时。

tmpfs挂载的好用例

tmpfs当您不希望数据在主机或容器内持久存在时,最好使用挂载。这可能是出于安全原因,或者在应用程序需要编写大量非持久状态数据时保护容器的性能。

使用绑定装入或卷的提示

如果使用绑定装入或卷,请记住以下几点:

  • 如果将空卷装入容器中存在文件或目录的目录中,则会将这些文件或目录传播(复制)到卷中。同样,如果启动容器并指定尚不存在的卷,则会为您创建一个空卷。这是预先填充另一个容器所需数据的好方法。

  • 如果将绑定装载或非空卷装入容器中存在某些文件或目录的目录中,则挂载会遮盖这些文件或目录,就像将文件保存到/mntLinux主机上然后安装USB驱动器进入/mnt/mnt在卸载USB驱动器之前,USB驱动器的内容会遮盖内容。隐藏的文件不会被删除或更改,但在安装绑定装载或卷时无法访问。

docker-管理数据的更多相关文章

  1. [docker] 管理docker容器中的数据

    之前我们介绍了Docker的基本概念(前面的没翻译...),了解了如何使用Docker镜像进行工作,并且学习了网 络和容器之间的链接.这一节我们将讨论如何管理容器中及容器之间的数据. 我们将查看下面两 ...

  2. docker中管理数据

    到目前我们介绍了一些Docker的基础概念, 知道了如何使用Docker的image, 也知道了如何在多个container间通过网络通讯. 在这章里我们将介绍如何在docker的container内 ...

  3. Docker 管理应用程序数据

    1.将Docker主机数据挂载到容器 Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes , bind mounts 和tmpfs volumes:  Docker管理宿主机文件 ...

  4. Docker管理应用数据

    1.  Manage data in Docker 默认情况下,所有在容器内部创建的文件被存储在一个可写的容器层.这就意味着: 当容器不存在的时候,数据不能被持久化,而且在容器外部想要读取这些数据十分 ...

  5. docker 应用数据的管理

    容器数据存储的三种方式 docker volume docker管理素质及文件系统的一部分,保存数据最佳方式 bind mounts   将宿主机的文件映射到容器里 tmpfs   存储在宿主机的内存 ...

  6. docker 管理应用程序数据和网络管理

    Volume和Bind Mount Docker提供三种不同方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs volumes:Docker管理宿主机文件系统的一部分( ...

  7. docker之数据卷管理

    转自:https://www.cnblogs.com/jsonhc/p/7777811.html docker之数据卷的备份和还原 1.现在利用镜像创建一个nginx的服务容器,并挂载一个数据卷 [r ...

  8. Docker管理工具 - Swarm部署记录

    之前介绍了Docker集群管理工具-Kubernetes部署记录,下面介绍另一个管理工具Swarm的用法,Swarm是Docker原生的集群管理软件,与Kubernetes比起来比较简单. Swarm ...

  9. Mesos+Zookeeper+Marathon的Docker管理平台部署记录(2)- 负载均衡marathon-lb

    之前介绍了Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)的操作,多余的废话不说了,下面接着说下在该集群环境下的负载均衡marathon-lb的部署过程: 默认情况 ...

  10. Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)

    随着"互联网+"时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及 ...

随机推荐

  1. win10提示 磁盘包含不是“PARTITION_BASIC_DATA_GUID"类型的分区

    在win10创建新的磁盘分区的时候,有时候会提示 磁盘包含不是"PARTITION_BASIC_DATA_GUID"类型的分区 如果你试了其他方法都不凑效,那么看看你已经有几个盘( ...

  2. [转]C#操作Memcached帮助类

    在VS中安装Memcached,直接在NuGet下搜索Memcached,选择第一个进行安装: 服务端资源下载地址:https://pan.baidu.com/s/1gf3tupl 接下来开始写程序, ...

  3. Vue 各个阶段生命周期函数

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. H3C 路由的来源

  5. QuartusII 13.0的完美破解

    网络上破解QuartusII 13.0软件的方法都不行,最后经过本人总结测试(独创),最终实现了QuartusII 13.0的破解,破解方法如下: 网上常规操作之后,会得到一个“license.dat ...

  6. centos7 安装R和RstudioServer版

    参考: http://www.cnblogs.com/inspursu/p/4275701.html http://blog.csdn.net/u010022051/article/details/5 ...

  7. HDU 3746 Cyclic Nacklace(kmp next数组运用)

    Cyclic Nacklace Problem Description CC always becomes very depressed at the end of this month, he ha ...

  8. The Preliminary Contest for ICPC Asia Nanjing 2019ICPC南京网络赛

    B.super_log (欧拉降幂) •题意 定一个一个运算log*,迭代表达式为 给定一个a,b计算直到迭代结果>=b时,最小的x,输出对m取余后的值 •思路 $log*_{a}(1)=1+l ...

  9. Js中没有方法的重载

    <script type="text/javascript"> //方法名相同,后面的方法覆盖了前面的方法.后面的方法需要一个name,但没给传值,所以是undefin ...

  10. 多校 HDU - 6614 AND Minimum Spanning Tree (二进制)

    传送门 AND Minimum Spanning Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 ...