如何在 Docker 中处理持久存储(例如数据库)?
您可以使用 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 容器时,其中存储的所有数据都会丢失。因此,您可以使用卷或绑定挂载来解决这个问题。

