在Windows上轻松创建Docker卷

Docker卷是处理由Docker容器创建和使用的持久数据的首选方法。让我们看看这是如何工作的,涵盖了如何在Windows上创建Docker卷。您还将学习如何管理它们!

本博客文章有一个由TechSnips贡献者Matt McElreath创建的配套视频。随意观看,或者如果您喜欢文字,继续阅读!

存储持久数据

如果您想为容器存储持久数据,有几个选项可供选择。首先,我将向您展示如何使用绑定挂载。我当前在我的C:\下的一个名为data的文件夹中。如果我列出此文件夹的内容,您可以看到我有五个文本文件。

Multiple text files in the C:\data folder

如果我想将此文件夹提供给一个容器,我可以在启动容器时挂载它。

让我们继续使用docker run运行一个容器。我将以交互模式运行此容器,然后指定-V。在这里,我将放置我的数据文件夹的路径,然后加上一个冒号,然后我将指定容器内我希望将此文件夹挂载的路径。

对于这个,我将指定 C:\shareddata 文件夹。然后我将指定 Windows 服务器核心 镜像,最后,我将指定我希望在容器内部运行 PowerShell。

docker run -it -v c:\Data:c:\shareddata microsoft/windowsservercore powershell

现在我已经进入了新的容器,如果我列出 C:\ 的内容,你可以看到我有一个 shareddata 文件夹。

Listing directory contents in a Docker container

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

Files on the host

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.

Creating a file on the container host

我们可以看到上面创建了新文件从容器内部。现在我将退出该容器,通过运行 exit 来关闭它。

如果我运行 docker ps,你可以看到当前没有正在运行的容器。

Looking for running containers

在 Docker 卷中列举数据

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

Listing files on the container host

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

从新的容器内部,如果我列出 C:\ 的内容,你可以再次看到我有一个名为 shareddata 的文件夹。

Listing files

如果我列出那个文件夹的内容,目前是空的,因为我们创建了一个空卷。现在让我们运行Ctrl-P-Q,这将使我们退出正在运行的容器,但保持其在后台运行。

从容器主机运行docker volume ls。这将列出此容器主机上当前的卷。我有一个名为hostdata的卷,当我在docker run命令中指定它时创建的。

Listing Docker volumes

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

Listing running containers

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

Stopping a Docker container

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

Listing Docker volumes

创建 Docker 卷

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

Creating a new Docker volume

现在你将把它挂载到一个新的容器中。再次使用docker run,并为卷指定刚刚创建的卷,并将其挂载到c:\logdata

> docker run -it -v logdata:c:\logdata microsoft/windowsservercore powershell

从容器内部进入logdata文件夹并创建一些文件。当前,该目录中没有任何文件,所以请继续创建一些。

PS> New-Item -Name Log1.txt -ItemType File
PS> New-Item -Name Log2.txt -ItemType File

现在,该目录中有两个日志文件。

Two files in C:\logdata

再次运行Ctrl-P-Q以退出该容器,同时容器仍在运行。在该容器运行时,启动一个新的容器并挂载相同的卷。

> docker run -it -v logdata:c:\logdata microsoft/windowsservercore powershell

如果我们在新容器中对logdata文件夹运行列表命令,我们可以看到这两个日志文件被共享。

Two log files being shared with containers

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

Two containers still running

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

Removing Docker containers

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

Volume still available

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

Docker volume syntax

检查 Docker 卷

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

Inspecting Docker volumes

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

Files created earlier

删除 Docker 卷

删除卷,我们可以运行docker volume rm,然后是要删除的卷的名称。

> docker volume rm logdata

现在,如果我列出卷,logdata就不在那里了。

Listing Docker volumes

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

Inspecting the prune parameter

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

如果我再次列出我的卷,您会看到它们都已被删除。

No Docker volumes exist

总结

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

Source:
https://adamtheautomator.com/create-docker-volume/