如果容器是隔離的,那麼它們如何與主機進行通信,例如存儲數據?因為當我們從映像創建容器時,容器被移除時生成的任何數據都會丟失。
因此,我們需要一種方式來實現永久性存儲。
我們可以使用 Bind Mounts 和 Volumes 來實現。
兩者之間沒有太大的區別,除了 Bind Mounts 可以指向主機計算機上的任意文件夾,並且不由 Docker 直接管理。
讓我們首先看看 Bind Mounts。一個典型的例子是日誌文件。假設您的應用在容器內的 /usr/src/app/logs 文件夾中創建了一個日誌文件,您可以使用 docker run 命令的 -v(與 --volume 相同)選項將其映射到主機計算機上的一個文件夾中,例如 -v ~/logs:/usr/src/app/logs。
這將把該文件夾映射到用戶的主目錄下的 logs 子文件夾中。
注意:-m 或 --mount 選項的使用方法非常相似。
以下是我們以前創建的 examplenode 映像的命令示例:
docker run -d -p 80:3000 -v ~/logs:/usr/src/app/logs --name node-app examplenode 現在我們可以運行我們的 Node 應用程序,並將任何日誌存儲在主機計算機中,而不是 Docker 容器內部。
請注意,examplenode 應用程序不會在 /usr/src/app/logs 中生成任何日誌,這只是一個示例,您需要首先設置該日誌。
有關該卷的詳細信息將在運行 docker inspect 命令時列出,可以在容器名稱下的“Mounts”部分找到:
"Mounts": [ { "Type": "bind", "Source": "/Users/flavio/logs", "Destination": "/usr/src/app/logs", "Mode": "", "RW": true, "Propagation": "rprivate" } ], 您能看到 "Type": "bind" 嗎?這表示我們創建了一個 bind mount。...