Docker 中的数据存储

Docker 镜像是内置的层级结构,而 Docker 容器将所有正在使用的数据都存储在容器的可写层上,该层仅在容器的生命周期内才会被持久化,也就是说,一旦容器被移除,该层就无法再访问。如果其他进程需要这些数据,那么从容器中获取这些数据也会变得非常困难。

为了无论能持久保存数据,以便即使容器不再可用,文件仍可在主机文件系统中使用,Docker 提供了两个选项:

  1. Docker 卷

  2. 绑定挂载

但是,如果您在 Linux 上使用 Docker,您也可以使用tmpfs mount ,如果您在 Windows 上使用 Docker,您也可以使用命名管道。

在本文中,我们将介绍 docker 卷和绑定挂载以及它们在用例和有效性方面的差异。

1. Docker volume

volume是存在于主机文件系统上的目录或文件,它们被挂载到容器上,用于持久化容器生成或修改的数据。它们存储在由 Docker 专门管理的主机文件系统部分,并且不应被非 Docker 进程修改。卷是存储容器数据的最佳方式,因为它们性能高效,并且与 Docker 主机的其他功能隔离。

我们可以使用以下命令来创建 docker 卷 -:

docker volume create <volume_name>

我们可以同时将一个卷挂载到多个容器,即使它们没有被任何正在运行的容器使用,Docker 也不会删除它们。要删除卷,我们可以使用以下命令:

docker volume prune

在 Linux 文件系统中,我们可以在以下路径 /var/lib/docker/volumes/ 找到可用的卷,而在 Windows 中,我们可以通过在文件资源管理器中运行以下命令来获取卷的位置 :

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes

要了解有关卷的更多信息以及如何将其安装到容器,请单击此处

创建卷的命令

2.) 绑定挂载

这也是 Docker 提供的一种在本地主机上存储容器数据的机制,但使用绑定挂载挂载的目录或文件也可以被非 Docker 进程访问,并且它依赖于主机的文件系统具有特定的可用目录结构,因为它使用绝对路径进行绑定

绑定挂载功能有限,无法通过 Docker CLI 直接管理,因此与卷相比不太受欢迎。此外,它允许容器修改主机文件系统,即创建、修改或删除重要的文件目录,这可能会影响安全性和非 Docker 进程

3.) tmpfs 挂载

在 Linux 中使用 Docker 时,你也可以使用tmpfs挂载为容器创建存储卷。但与绑定挂载和卷不同,这种挂载是临时的,会持久保存在主机内存中

一旦容器停止,_tmpfs_挂载将被移除,使用它存储的文件将不再可用。这种挂载的用途非常有限,仅限 Linux 用户使用。此外,它不允许在容器之间共享已挂载的数据

4.) 命名管道

何时使用卷

以下是卷的一些潜在用例 -:

  • 卷可用于以安全的方式在多个容器之间共享数据,而不会影响主机文件系统。

  • 它们提供了从一个 Docker 主机到另一个 Docker 主机的便捷备份和数据迁移。

  • 我们可以使用 Docker CLI 和 Docker API 轻松管理卷,但这对于绑定挂载来说是一个限制。

  • 主机文件系统结构的重要性使得Docker主机配置与容器运行时解耦。

  • 卷通过卷驱动程序可以将数据存储到远程主机或云提供商。

  • 卷存储在 Linux 虚拟机中,因此延迟更低、吞吐量更高。它们在 Docker 桌面上性能卓越,是数据存储等写入密集型应用的更佳选择。

何时使用绑定挂载

尽管功能有限,但我们可以在以下情况下使用绑定挂载:

  • 它可用于在主机和容器之间提供共享配置文件。例如,Docker 将 /etc/resolv.conf ” 挂载到容器以进行 DNS 解析。

  • 在保证主机文件系统保持一致并且挂载的卷不被非 Docker 进程访问的情况下,我们可以使用绑定挂载来存储数据。

Leave a Comment