如何在 Docker 中實現本地檔案掛載:Bind Mount 完整指南
Docker 容器的設計初衷是隔離應用程序,在建構映像時便包含運行所需的所有依賴項,使其運行不受宿主機的環境影響。然而,有時候我們可能想要同步本地程式碼至容器內部,或將敏感資料如 API 密鑰以安全方式提供給容器。此時,Docker 的隔離性卻讓它無法直接存取宿主機的檔案資料,因此 Docker 提供了「掛載」功能,讓我們能在容器中方便地存取本地資料。
兩種 Docker 檔案掛載方式:Volume 和 Bind Mount
Docker 提供了兩種主要的掛載方式來實現本地與容器之間的資料共享:Volume 和 Bind Mount。它們雖然都能掛載 本地資料,但在實際應用場景和運作原理上卻有所不同。
Docker Volume(資料卷)
Volume 是 Docker 針對「資料持久化」提供的解決方案,尤其適合需要長期保存的資料,像是資料庫檔案、應用程式設定等。當容器被刪除時,Volume 中的資料仍會保留,讓資料的管理更安全與穩定。
使用 Volume 有以下幾個好處:
- 自動管理:Docker 會自動選擇存儲路徑,並進行優化,無需開發人員指定路徑。
- 跨容器共享:同一個 Volume 可以被多個容器掛載,適合用於需要共享資料的情境,例如多個服務共用一組資料。
- 安全隔離:Volume 的資料與主機系統隔離,即使資料意外刪除也不會直接影響到主機的檔案。
以下為 Volume 的使用範例:
docker run -d -v my_volume:/app/data my_image
在此指令中,my_volume
是一個 Docker Volume,會掛載到容器內部的 /app/data
目錄中。
Bind Mount(綁定掛載)
相比之下,Bind Mount 更靈活,它允許直接指定宿主機的目錄或檔案掛載到容器中,適合開發測試環境下使用。尤其是當你需要同步程式碼修改時,Bind Mount 能讓本地更改即時反映在容器中,無需重建。
Bind Mount 的優勢包括:
- 即時同步:可以快速同步本地編輯的代碼或文件,無需重新打包 image 或重建容器。
- 靈活性:我們可以指定任意本地路徑作為 Bind Mount 的來源,並掛載到容器的特定目錄中。
- 方便測試和調試:在開發過程中,可以隨時進行測試,不需頻繁重啟容器。
以下為 Bind Mount 的使用範例:
docker run -d -v /path/to/local/folder:/app/folder my_image