CodeGym /Adesua ahorow /Docker SELF /掛載磁碟卷

掛載磁碟卷

Docker SELF
等級 12 , 課堂 2
開放

8.1 認識虛擬磁碟

掛載卷(Volumes)是 Docker 最有用的功能之一。透過它,容器可以輕鬆使用主機機器的資料。這個功能讓資料管理變得靈活且方便:你可以長期保存資料,在容器間共享資料,並且如果出現問題,也可以輕鬆地進行備份或恢復資料。

卷(Volumes)在 Docker 裡是一種保存資料的方式,使其不依賴於容器。即使容器被刪除,存放在卷裡的資料仍然安全無虞。卷可以掛載到容器上,這使得資料可以分開存放並重複使用,不管你創建或刪除了多少次容器都不會影響它們。

主要的卷類型

  1. 匿名卷(Anonymous Volumes)
    • 當容器沒有明確指定卷時,Docker 會自動創建。
    • 用於臨時儲存資料。
  2. 命名卷(Named Volumes)
    • 由 Docker 創建並管理。
    • 可以連接到多個容器,即使容器被刪除或停止也依然存在。
  3. 綁定卷(Bind Mounts)
    • 將主機機器中的目錄與容器中的目錄進行綁定。
    • 非常適合存取主機系統的資料,並且在開發過程中特別方便。

掛載卷的 docker run 指令主要語法


-v <host_path>:<container_path>

完整語法:


docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]

掛載卷的主要參數

1. 參數 -v--volume

用於創建命名卷或綁定卷。

範例:

Terminal

docker run -d -v /host/data:/container/data nginx

2. 參數 --mount

提供更靈活且細緻的掛載卷方式,支持更多的參數。

範例:

Terminal

docker run -d --mount type=bind,source=/host/data,target=/container/data nginx

8.2 創建與使用 Volumes

1. 命名 Volumes

命名 Volumes 是由 Docker 創建與管理的。它們主要用於長期儲存需要在容器重啟或刪除之後仍然保留的數據。

創建命名 Volume:

Terminal

docker volume create my_volume

啟動掛載 Volume 的容器:

在這個例子中,Volume my_volume 被掛載到容器內的目錄 /data。寫入到 /data 的所有數據將會保存在 Volume 中,即使刪除了容器,數據仍然可用。

Terminal

docker run -d -v my_volume:/data --name my_container nginx

2. 匿名 Volumes

匿名 Volumes 是 Docker 自動創建的,它們與特定的容器綁定。這些 Volumes 適合用於刪除容器後不需要保留的臨時數據。

啟動帶匿名 Volume 的容器:

在這個例子中,Docker 將自動創建匿名 Volume,並將其掛載到容器內的目錄 /data

Terminal

docker run -d -v /data --name my_container nginx

3. 綁定目錄

綁定目錄允許將主機系統中的目錄掛載到容器中。這在容器與主機系統之間共享數據時非常有用。這種方法在開發過程中也很常見,例如源代碼存儲在主機系統時。

啟動帶綁定目錄的容器:

在這個例子中,主機機器上的目錄 /host/data 被掛載到容器內的目錄 /container/data

Terminal

docker run -d -v /host/data:/container/data --name my_container nginx

8.3 使用卷的範例

1. 保存資料庫數據

使用卷來保存資料庫數據,有助於在重新啟動或更新容器時保存數據。這點對於生產環境中的可靠運行特別重要。

範例:

在這個範例中,PostgreSQL 的數據被保存到卷 db_data 中,這確保了數據在重新啟動或刪除容器時不會丟失。

Terminal

docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres

2. 容器之間共享數據

有時候需要讓多個容器共享數據。卷讓這個操作變得簡單。

範例

我們將創建一個卷,並啟動兩個容器共同使用這個卷。這兩個容器都能訪問卷 shared_data 中的數據,從而實現數據共享。

Terminal

docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx

3. 開發與測試

在進行應用程式開發時,可以使用綁定目錄來共享原始碼,讓容器和主機之間無縫合作。這樣開發者可以在主機上編輯程式碼,容器則可以立即使用更新後的程式碼。

範例

在這個範例中,主機上的目錄 /path/to/source 被掛載到容器 dev_container 的目錄 /app 中。這樣,容器可以直接使用主機系統上的最新原始碼。

Terminal

docker run -d -v /path/to/source:/app --name dev_container node
<

8.4 卷管理

Docker 提供了方便的命令來管理卷,讓我們可以輕鬆創建、刪除以及查看卷的資訊。

1. 查看所有卷

這個命令會列出主機機器上所有可用的卷。

Terminal

docker volume ls

2. 查看卷的資訊

使用這個命令可以獲取卷 my_volume 的詳細資訊:它在主機文件系統上的位置,以及使用該卷的容器資訊。

Terminal

docker volume inspect my_volume

3. 刪除卷

這個命令會刪除卷 my_volume。在刪除之前,務必要確認該卷未被任何容器使用,否則命令將無法執行。

Terminal

docker volume rm my_volume

8.5 卷宗的備份

為了保證資料的安全,能夠創建卷宗的備份並在必要時恢復它們是很重要的。

1. 卷宗的備份

在這個例子中,卷宗 my_volume 的內容被歸檔到文件 my_volume_backup.tar.gz 中,然後保存在主機上的目錄 /backup 中。

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume

2. 卷宗的恢復

這個例子從存儲在文件 my_volume_backup.tar.gz 中的備份中恢復卷宗 my_volume 的內容。

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION