学习Docker第6部分:处理数据

在今天的Docker系列文章中,我们将讨论如何处理数据。 特别是Docker卷。 在这些材料中,我们不断将Docker的软件机制与各种可食用的类比进行比较。 我们在这里不会背离这一传统。 Docker数据应该很有趣。 世界上有很多种类的香料,而在Docker中,有许多处理数据的方法。

第1部分:基础知识
第2部分:术语和概念
第3部分:Dockerfile文件
第4部分:缩小图像尺寸并加快其组装速度
第5部分:团队
第6部分:处理数据



请注意,此材料是使用Docker引擎18.09.1版和API版本1.39编写的。

Docker数据可以临时或永久存储。 让我们从时间数据开始。

临时数据存储


有两种方法可以在Docker容器中组织使用临时数据的工作。

默认情况下,在容器中运行的应用程序创建的文件将保存在启用了记录的容器层中。 为了使该机制起作用,您无需专门配置任何内容。 结果便宜又愤怒。 应用程序只需要保存数据并继续做自己的事情。 但是,在容器不再存在之后,以这种简单方式存储的数据将消失。

要将临时文件存储在Docker中,可以使用另一种解决方案,该解决方案与使用标准数据进行临时存储相比,需要更高的性能。 如果不需要将数据存储的时间长于容器存在的时间,则可以将tmpfs(使用主机RAM的信息的临时存储)连接到容器。 这将加快写入和读取数据的性能。

经常发生的情况是,即使容器不再存在,也需要存储数据。 为此,我们需要有用的机制来永久存储数据。

永久数据存储


有两种方法可以使数据寿命比容器寿命更长。 一种方法是使用绑定安装技术。 使用这种方法,您可以将一个实际存在的文件夹挂载到容器中。 位于Docker外部的进程将能够使用存储在此类文件夹中的数据。 这就是tmpfs挂载和绑定挂载技术的样子


挂载tmpfs并绑定挂载

使用绑定安装技术的缺点是,使用绑定安装技术使备份数据,迁移数据以及在多个容器之间共享数据变得困难。 最好使用Docker卷进行持久数据存储。

汤姆·波克


卷是位于容器外部的主机上的文件系统。 卷创建和管理由Docker完成。 以下是Docker卷的基本属性:

  • 它们代表了永久存储信息的一种手段。
  • 它们是独立的,并且与容器分开。
  • 它们可以在不同的容器之间共享。
  • 它们使您可以组织有效的数据读写。
  • 卷可以托管在远程云提供商上。
  • 它们可以被加密。
  • 可以给它们起名字。
  • 容器可以安排要预先用数据填充的卷。
  • 它们便于测试。

如您所见,Docker卷具有强大的功能。 让我们谈谈如何创建它们。

卷创建


可以使用Docker或通过API请求创建卷。

这是Dockerfile中的指令,可让您在容器启动时创建卷。

VOLUME /my_volume 

当使用类似的Docker指令时,在创建容器后,它将创建一个包含指定位置已经存在的数据的卷。 请注意,如果您使用Dockerfile创建卷,那么这并不需要您为卷指定安装点。

您还可以使用JSON格式在Dockerfile中创建卷。

此外,可以在容器运行时使用命令行创建卷。

从命令行使用卷


▍创建体积


您可以使用以下命令创建独立卷:

 docker volume create —-name my_volume 

▍折叠量信息


要查看Docker卷的列表,请使用以下命令:

 docker volume ls 

您可以像这样浏览特定的卷:

 docker volume inspect my_volume 

Volume删除音量


您可以这样删除卷:

 docker volume rm my_volume 

为了删除容器不使用的所有卷,可以使用以下命令:

 docker volume prune 

在删除卷之前,Docker将要求您确认此操作。

如果该卷与容器关联,则在删除相应的容器之前无法删除该卷。 在这种情况下,即使容器被删除,Docker也不总是了解这一点。 如果发生这种情况,可以使用以下命令:

 docker system prune 

它旨在清理Docker资源。 执行此命令后,您应该能够删除先前错误确定状态的卷。

标志--mount和--volume


要使用卷,当您调用docker ,通常必须使用标志。 例如,为了在创建容器期间创建卷,可以使用以下构造:

 docker container run --mount source=my_volume, target=/container/path/for/volume my_image 

在古代(到2017年),-- --volume标志很--volume 。 最初,此标志(也可以以缩写形式使用,然后看起来像-v )用于独立容器,而--mount标志--mount Docker Swarm环境。 但是,从Docker 17.06开始,可以在任何情况下使用--mount标志。

应该注意的是,当使用--mount标志时,必须在命令中指定的附加数据量会增加,但是由于多种原因,最好使用此标志而不是--volume--mount标志是允许您使用服务或指定卷驱动程序设置的唯一机制。 此外,使用此标志更加容易。

在现有的旨在在Docker中处理数据的命令示例中,您可以找到许多使用-v标志的示例。 尝试自己修改这些命令时,请记住--mount--volume使用不同的参数格式。 也就是说,您不能仅将-v替换为--mount并获得有效的命令。

--mount--volume之间的主要区别在于,使用--volume标志时--volume所有参数都集中在一个字段中,而使用--mount参数是分开的。

使用--mount参数表示为键值对,即看起来像key=value 。 这些对之间以逗号分隔。 以下是常用的--mount选项:

  • type -安装类型。 对应密钥的值可以是bindvolumetmpfs 。 我们在这里谈论数量,即-我们对volume的价值感兴趣。
  • source -挂载源。 对于命名卷,这是卷的名称。 对于未命名的卷,未指定此键。 可以将其缩短为src
  • destination容器中文件或文件夹的安装路径。 可以将此键缩短为dsttarget
  • readonly -挂载只读卷。 此键的使用是可选的;没有为其分配任何值。

这是在许多选项中使用--mount的示例:

 docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image 

总结


以下是使用Docker卷时可以使用的一些有用命令:

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

这是--mount的常用选项的--mount ,适用于docker run --mount my_options my_image类的命令:

  • type=volume
  • source=volume_name
  • destination=/path/in/container
  • readonly

既然我们已经完成了Docker系列文章,那么现在该说些研究Docker的人可以继续前进的地方了。 这是一篇有关Docker的优秀文章。 这是一本有关Docker 书(购买本书时,请尝试获取其最新版本)。 是另一本适合那些认为实践是学习技术的最佳方法的人的书。

亲爱的读者们! 您会建议初学者学习有关Docker的哪些材料?

Source: https://habr.com/ru/post/zh-CN441574/


All Articles