Docker卷是处理由Docker容器创建和使用的持久数据的首选方法。让我们看看这是如何工作的,涵盖了如何在Windows上创建Docker卷。您还将学习如何管理它们!
本博客文章有一个由TechSnips贡献者Matt McElreath创建的配套视频。随意观看,或者如果您喜欢文字,继续阅读!
存储持久数据
如果您想为容器存储持久数据,有几个选项可供选择。首先,我将向您展示如何使用绑定挂载。我当前在我的C:\下的一个名为data的文件夹中。如果我列出此文件夹的内容,您可以看到我有五个文本文件。

如果我想将此文件夹提供给一个容器,我可以在启动容器时挂载它。
让我们继续使用docker run
运行一个容器。我将以交互模式运行此容器,然后指定-V
。在这里,我将放置我的数据文件夹的路径,然后加上一个冒号,然后我将指定容器内我希望将此文件夹挂载的路径。
对于这个,我将指定 C:\shareddata 文件夹。然后我将指定 Windows 服务器核心 镜像,最后,我将指定我希望在容器内部运行 PowerShell。
现在我已经进入了新的容器,如果我列出 C:\ 的内容,你可以看到我有一个 shareddata 文件夹。

让我们进入那个文件夹并列出内容。这是我的容器主机上位于该文件夹中的五个测试文件。

I can also create files in this folder, which will be available to other containers or my container host. Let’s go ahead and run a new item to create a file called containertest.

我们可以看到上面创建了新文件从容器内部。现在我将退出该容器,通过运行 exit
来关闭它。
如果我运行 docker ps
,你可以看到当前没有正在运行的容器。

在 Docker 卷中列举数据
现在让我们再次从我的容器主机列出数据文件夹的内容。

我们可以看到从容器内部创建的名为 containertest 的新文件。然而,绑定挂载具有一些功能上的限制,所以卷是完成我们正在尝试的操作的首选方法。要开始使用卷,我们可以运行相同的命令来启动一个容器,但这次有一些小的不同。在我们指定卷的地方,我将使用单词 hostdata 作为我想要创建和使用的卷的名称,而不是使用容器主机文件系统上的路径。
从新的容器内部,如果我列出 C:\ 的内容,你可以再次看到我有一个名为 shareddata 的文件夹。

如果我列出那个文件夹的内容,目前是空的,因为我们创建了一个空卷。现在让我们运行Ctrl-P-Q,这将使我们退出正在运行的容器,但保持其在后台运行。
从容器主机运行docker volume ls
。这将列出此容器主机上当前的卷。我有一个名为hostdata的卷,当我在docker run
命令中指定它时创建的。

如果我运行docker ps
,我们可以看到我们正在运行的容器。

使用docker stop
停止该容器。现在我们没有正在运行的容器了。

通过运行docker rm
删除已停止的容器。如果我再次列出卷,你会看到hostdata卷仍然可用,并且可以挂载到新容器中。

创建 Docker 卷
创建卷的另一种方法是使用docker volume create
命令。如果你不指定名称,docker 将会给它一个长长的随机字符列表作为名称。否则,你可以在这里指定一个名称。我将这个卷命名为logdata。现在当我们再次列出卷时,我们可以看到它在列表中。

现在你将把它挂载到一个新的容器中。再次使用docker run
,并为卷指定刚刚创建的卷,并将其挂载到c:\logdata。
从容器内部进入logdata文件夹并创建一些文件。当前,该目录中没有任何文件,所以请继续创建一些。
现在,该目录中有两个日志文件。

再次运行Ctrl-P-Q以退出该容器,同时容器仍在运行。在该容器运行时,启动一个新的容器并挂载相同的卷。
如果我们在新容器中对logdata文件夹运行列表命令,我们可以看到这两个日志文件被共享。

现在,退出该容器。您应该仍然有一个运行中的容器和两个已退出的容器。

现在停止所有运行中的容器,然后运行docker rm
以删除所有已退出的容器。

再次列出卷。logdata卷仍然可以挂载到将来的容器中。

如果运行docker volume
,您将获得有关该命令的一些使用帮助。

检查 Docker 卷
我们已经查看了create
,现在让我们转向inspect
。如果我对logdata卷运行docker volume inspect
,它将返回该卷的属性,包括挂载点,即容器主机上卷的物理路径。

让我们使用Invoke-Item
打开该文件夹并查看。在logdata文件夹下,有一个名为data的文件夹。如果我们打开它,我们可以看到先前从容器中创建的文件。

删除 Docker 卷
删除卷,我们可以运行docker volume rm
,然后是要删除的卷的名称。
现在,如果我列出卷,logdata就不在那里了。

最后,我们可以使用prune
删除所有未使用的本地卷。这将删除所有未挂载到正在运行或已停止容器的卷。

在使用此命令时要小心,会有警告和提示,确保您确实想要执行此操作。如果我输入Y
并按回车,它将显示删除的卷。
如果我再次列出我的卷,您会看到它们都已被删除。

总结
在这篇博文中,您应该已经对在Windows中管理Docker卷有了很好的概述。Docker是一个很棒的容器平台。有了它对Windows的支持以及您在管理Docker卷方面的新技能,您将无往而不利!