Docker 卷是處理由 Docker 容器創建和使用的持久數據的首選方法。讓我們來看看這是如何工作的,通過介紹如何在 Windows 上創建 Docker 卷。您還將學習如何管理它們!
這篇博文有由 TechSnips 貢獻者 Matt McElreath 創建的相應視頻。如果你喜歡視頻,可以觀看,或者如果你更喜歡文字,繼續閱讀!
存儲持久數據
如果您想為容器存儲持久數據,有幾個選項。首先,我將向您展示如何使用 綁定掛載。我目前位於 C:\ 下的一個名為 data 的文件夾中。如果我列出此文件夾的內容,您可以看到我有五個文本文件。

如果我想要將此文件夾提供給容器使用,我可以在啟動容器時進行掛載。
我們來運行一個使用 docker run
的容器。我將以互動模式運行此容器,然後指定 -V
。在這裡,我將放置我的數據文件夾的路徑,後跟冒號,然後我將指定容器內部我想將此文件夾掛載的路徑。
對於此操作,我將指定位於 C:\shareddata 的資料夾。然後,我將指定 Windows Server Core 映像,最後,我將指定在容器內運行 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卷的新技能,您将势不可挡!