如何处理 Docker 中的持久存储(例如数据库)?

您可以使用 Docker 卷来实现 Docker 中持久存储的解决方案。也有绑定安装,但它们的问题在于它们高度依赖于底层主机以及目录结构。卷完全由 Docker 管理和控制。通过绑定挂载,我们将主机系统的文件或目录挂载到容器中。我们可以通过它的绝对路径来引用挂载的目录。

但是,当我们使用卷时,我们会在由 Docker 管理的主机上的 Docker 存储目录中创建一个新目录。与在容器的可写层上持久化文件或数据相比,卷始终是更好的选择。这是因为在 Docker 中使用卷 doeHow 处理持久存储(例如数据库)不会增加容器的大小。此外,卷的内容也存在于容器的生命周期之外。

在我们开始使用卷之前,您有必要了解使用卷相对于其他持久存储方法(例如绑定安装)的好处。

  • 更容易迁移或备份。

  • 使用简单的 API 或 CLI 更易于管理。

  • 它们适用于 Windows 和 Linux。

  • 安全且易于共享。

  • 驱动程序可让您在云或远程服务器上存储卷、内容加密等。

  • 您可以使用来自其他容器的内容预先填充卷。

现在,让我们看看如何挂载卷。您可以使用称为 -v 和 --mount 的两个不同标志在容器上安装卷。

--mount 选项由以逗号分隔的键值元组组成。它的语法更冗长,键的顺序无关紧要。如果要指定驱动程序选项,则必须使用 --mount 选项。

-v 标志包含三个由 : 分隔的字段,并且它们的顺序必须正确。让我们看看如何使用不同的命令处理卷。

要创建卷,您可以使用 -

$ docker volume create my-vol

此命令将在主机的 Docker 存储目录中创建一个名为 my-vol 的卷。

如果要列出所有卷,可以使用 -

$ docker volumes ls

要检查 Docker 卷,请使用 -

$ docker volume inspect my-vol

这将列出所有详细信息,例如创建日期、路径、关联容器等。

最后,要完全删除 Docker 卷,您可以使用 -

$ docker volume rm my-vol

现在您已经创建了一个卷,下一步是将该卷挂载到一个容器中。请注意,如果您挂载了一个不存在的卷,Docker 会自动为您创建它。

$ docker run -it --p 8080:80 --mount source=my-vol,target=/myapp nginx:latest

上面的命令会创建一个与Nginx镜像关联的容器,将8080端口发布到主机中的80端口。我们已经使用 --mount 选项指定键值对来定义卷的源名称和卷需要在容器中安装的目标目的地。

另一种挂载卷的方法是使用 -v 或 --volume 选项。考虑下面的命令。

$ docker run -it -v /source/path/location:/destinal/container-path debian

您还可以轻松地与多个其他容器共享卷。这将允许您与多个其他容器共享数据和文件。您可以使用 --volumes-from 选项执行此操作。所有容器都可以访问您存储在共享卷中的文件,并且可以对其进行操作。这些更改也将反映在其他容器上。

综上所述,在本文中,我们讨论了如何处理 Docker 中持久化数据存储的问题。当您退出 Docker 容器时,其中存储的所有数据都将丢失。因此,您可以使用卷或绑定安装来解决此问题。