网站搜索

通过示例解释 Docker 卷


对于Docker,数据将存储在容器内。当我们删除容器时,数据将会丢失。在本指南中,我们将学习如何创建 docker 卷、如何将其附加到容器以及如何在两个或多个容器之间共享同一个卷来存储数据。

如果您还不了解 docker 基础知识,请参阅以下指南:

  • Docker 入门

为什么 Docker 需要卷?

  • 删除容器时,卷不会被删除。
  • 将卷附加到容器或将其分离。
  • 在不同容器之间共享卷(存储/数据)。
  • 将容器与存储分离。
  • 将卷存储在远程主机或云上。

我们可以对数据和容器进行逻辑划分。我们可以通过删除数据的方式来保存数据
然后我们的数据也会出现在容器中。因此,在销毁容器后,我们可以将卷附加到任何现有容器以及新容器。

Docker 卷入门

dockervolume命令将显示卷命令的详细信息,我们可以通过它创建卷、检查卷的详细数据、列出可用卷以及删除卷。

docker volume

显示“dockervolume”命令的帮助部分

创建 Docker 卷

创建 docker 卷的语法是:

docker volume create <volume_name>

例子 :

docker volume create devops_volume

上面的命令将创建一个名为 devops_volume 的 docker 卷。

创建 Docker 卷

列出 docker 卷

要列出所有创建的 docker 卷,请运行:

docker volume ls

列出 docker 卷

检查 docker 卷

docker Volume Inspect 命令将为您提供有关卷创建、位置、名称和范围的详细信息。

句法 :

docker volume inspect <volume_name>

让我向您展示名为 devops_volume 的 docker 卷的详细信息。

docker volume inspect devops_volume

检查 docker 卷

创建附加卷的容器

句法 :

docker container create --name <container_name> -it --mount source<volume_name>,target=/<folder_Name> <image_name>

例子 :

docker container create --name myBusyBox1 -it --mount source=devops_volume,target=/app busybox

创建一个附加有卷的容器

要验证容器是否已创建,请使用 docker ps -a 命令:

“docker ps”命令输出

启动容器

要启动新创建的容器,例如 myBusyBox1,请运行:

docker container start myBusyBox1

启动docker容器

正如您在上面的屏幕截图中看到的,容器 myBusyBox1 已于 8 分钟前创建并于 6 秒前启动。

从共享卷在容器之间复制文件

让我们创建一个场景,在该场景中,我们将在共享位置的一个容器中创建文件,然后尝试从另一个容器访问该文件。

我们已经创建了一个名为 myBusyBox1 的容器。让我们创建另一个,例如 myBusyBox2

创建一个容器

现在我们有两个处于运行状态的容器,myBusyBox1 和 myBusyBox2。

让我们连接到第一个容器并在 /app 文件夹中创建一个文件。

docker exec -it myBusyBox1 sh

上面的命令将带您进入容器。

然后,在 /app 文件夹内创建一个名为 devops 的新文件夹,并从第一个容器退出。

连接到第一个容器

现在,将文件(例如 index.html)从本地系统复制到 myBusyBox1 容器的 /app/devops/ 位置。

docker container cp index.html myBusyBox1:/app/Devops

现在连接到另一个第二个容器,即 myBusyBox2 并验证 /app/devops 文件夹中的 index.html 文件是否存在。

docker exec -it myBusyBox2 sh

连接到第二个容器

从上面的屏幕截图可以确认两个容器共享相同的卷。

我们可以使用dockervolumeinspect命令检查卷的挂载点位置,如下所示:

docker volume inspect devops_volume

docker 检查卷命令

如您所见,挂载点位置为 /var/lib/docker/volumes/devops_volume/_data

让我们转到挂载点位置,看看复制的文件是否可用。

docker 卷挂载点

在挂载点位置我们找到了相同的文件。

删除 docker 卷

删除卷的语法是:

docker volume rm <volume_name>

让我们删除名为 devops_volume 的卷。

docker volume rm devops_volume

删除 docker 卷

在上面的屏幕截图中,我们尝试删除该卷,但无法删除,因为该卷已在使用中。因此,首先我们需要杀死容器并释放卷。然后我们就可以删除该卷了。

为此,首先使用命令删除所有正在运行的容器:

docker rm –f $(docker ps -aq)

然后删除卷:

docker volume rm devops_volume

删除 docker 卷

一次删除所有卷

使用 docker rm 命令,我们可以一次删除一个卷。如果我们有多个卷并且想要删除所有卷,那么我们必须使用 prune 命令。

让我们创建几个卷:

创建 docker 卷

现在使用命令一次性删除所有 docker 卷:

docker volume prune

一次删除所有 docker 卷

看?我们已经一次性删除了所有卷。

建议阅读:

  • 解释 Docker 网络概念
  • 如何自动更新正在运行的 Docker 容器
  • ctop – Linux 容器的命令行监控工具
  • Portainer – 管理 Docker 的最简单方法
  • PiCluster – 一个简单的、基于 Web 的 Docker 管理应用程序
  • Dockly – 从终端管理 Docker 容器

作者简介:

Dhruv Tiwari 是一名 DevOps 工程师,他喜欢自动化事物,喜欢大规模使用 Linux,并梦想有一天系统足够智能,永远不需要登录 Linux 机器。 CI/CD 从源代码到代码部署再到生产的旅程。