管理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. 解锁当前XXX用户

    pam_tally2 查看当前锁账户 pam_tally2 --user=XXX用户 --reset 解锁当前XXX用户

  2. 学习CSS预处理器Less

    1.Sass与Less的区别:Sass与Less的区别 2.Less的使用:Less的使用 3.Less的相关网址:Less.js.Less中文网 Less的HSL函数-lighten():HSL函数 ...

  3. linux lvm删除导致无法启动

    要想编辑/etc/fstab文件,我们需要在系统中重新挂载根目录,使其具有可读写状态,使用如下命令: mount -o remount,rw / 该条命令的作用是,以可读写的形式重新挂载根分区. 然后 ...

  4. 基于thinkphp实现根据用户ip判断地理位置并提供对应天气信息的应用

    https://blog.csdn.net/MyCodeDream/article/details/46706469 我们都知道,在很多的网站都提供了给用户提供天气预报的功能,有时会发现,用户即使不输 ...

  5. 零基础入门--中文命名实体识别(BiLSTM+CRF模型,含代码)

    自己也是一个初学者,主要是总结一下最近的学习,大佬见笑. 中文分词说到命名实体抽取,先要了解一下基于字标注的中文分词.比如一句话 "我爱北京天安门”. 分词的结果可以是 “我/爱/北京/天安 ...

  6. Json介绍与Ajax技术

    AJAX   AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据 ...

  7. Spring boot+JPA+Druid

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  8. java List接口中常用类

    Vector:线程安全,但速度慢,已被ArrayList替代. ArrayList:线程不安全,查询速度快. LinkedList:链表结构,增删速度快.取出List集合中元素的方式: get(int ...

  9. P1048 数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 输入格式 第一行包含一个整数 \(n\) ,表示数组中的元素个数 ...

  10. vue-learning:34 - component - 内置组件 - 缓存组件keep-alive

    vue内置缓存组件keep-alive <keep-alive>标签内包裹的组件切换时会缓存组件实例,而不是销毁它们.避免多次加载相应的组件,减少性能消耗.并且当组件在 <keep- ...