如何在 Docker 中处理持久化存储(例如数据库)?
您可以使用 Docker 卷来实现 Docker 持久化存储的解决方案。也有绑定挂载,但它们的问题在于它们高度依赖于底层主机以及目录结构。卷完全由 Docker 管理和控制。使用绑定挂载,我们将主机系统的文件或目录挂载到容器。我们可以通过其绝对路径引用挂载的目录。
但是,当我们使用卷时,我们在主机上的 Docker 存储目录中创建了一个新的目录,该目录由 Docker 管理。与在容器的可写层上持久化文件或数据相比,卷始终是更好的选择。这是因为使用卷不会增加容器的大小。此外,卷的内容也存在于容器生命周期之外。
在我们开始使用卷之前,您需要了解使用卷相对于其他持久化存储方法(如绑定挂载)的优势。
- 更易于迁移或备份。
- 更易于使用简单的 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 容器时,其中存储的所有数据都会丢失。因此,您可以使用卷或绑定挂载来解决此问题。