1.1 Volumes(卷)
在 Docker 中存儲資料是使用 container 時很重要的一部分。Container 本身是暫時性的,這意味著 container 裡面的資料會在停止或刪除 container 後丟失。為了在多次啟動之間保存資料並保證它們的長期存儲,Docker 提供了兩種主要技術:Volumes(卷)和 bind mounts(綁定目錄)。
Volumes(卷)
Volumes 是由 Docker 管理的資源,用於存儲資料。它們的存在獨立於 container 的生命周期,這讓它們可以用來長期存儲資料。Volumes 可以由 Docker 建立和管理,提供了一種方便的方式來將資料存儲在 container 外。
使用 Volumes 的優勢
- 與主機隔離:Volumes 儲存在 Docker 管理的主機中的特殊目錄中,這保證了它們的隔離性。
- 管理方便:Docker 提供了方便的命令來創建、刪除和管理 Volumes。
- 兼容性和可移植性:Volumes 可以輕鬆地在不同主機之間移動並與不同的 container 一起使用。
創建和使用 Volumes 的範例
創建 Volume:
docker volume create my_volume
在容器中使用 Volume:
在這個範例中,Volume my_volume
被掛載到 container my_container
的目錄 /data
中。
docker run -d --name my_container -v my_volume:/data nginx
1.2 綁定目錄 (Bind Mounts)
綁定目錄允許將主機上的特定目錄掛載到容器中。這讓容器可以使用主機上的文件和目錄,這對於開發和測試特別有用,當需要處理本地文件時尤其如此。
使用綁定目錄的優點:
- 直接訪問主機文件: 容器可以直接使用主機上的文件和目錄。
- 開發便利性: 開發人員可以輕鬆地修改主機上的文件,並即時在容器中查看這些更改。
- 靈活性: 綁定目錄可以是主機上的任何目錄,提供了更大的數據管理靈活性。
綁定目錄的使用範例
啟動帶有綁定目錄的容器:
docker run -d --name my_container -v /path/on/host:/data nginx
在這個例子中,主機上的目錄 /path/on/host
被掛載到容器 my_container
內的目錄 /data
中。
卷 (Volumes) 和綁定目錄的比較:
特性 | 卷 | 綁定目錄 |
---|---|---|
數據存儲 | 由 Docker 管理 | 由用戶管理 |
隔離性 | 與主機的文件系統隔離 | 使用主機的文件系統 |
性能 | 為 Docker 優化 | 依賴於主機的文件系統 |
適用性 | 長期存儲數據 | 開發和測試 |
1.3 實踐範例
使用的實踐範例
範例 1: 使用 volumes 對於數據庫
為了確保數據庫資料的長期存儲,可以使用 volumes。
創建 volume:
docker volume create db_data
使用 volume 啟動數據庫容器:
docker run -d --name postgres -e POSTGRES_PASSWORD=mysecretpassword -v
db_data:/var/lib/postgresql/data postgres
範例 2: 使用掛載目錄進行網頁開發
開發網頁應用程式時,可以使用掛載目錄,這樣本地文件的更改會立即反映在容器中。
使用掛載目錄啟動容器:
docker run -d --name web_dev -v $(pwd)/my_website:/usr/share/nginx/html nginx
在此範例中,當前工作目錄 my_website
被掛載到容器 nginx
的 /usr/share/nginx/html
目錄中。
GO TO FULL VERSION