在 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 Server Core 映像,最後,我將指定在容器內運行 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/