【Docker】如何掛載遠端主機目錄? NFS Volume

2023/08/28閱讀時間約 3 分鐘

相信Docker近幾年已經是IT與軟體開發者最常使用的一套虛擬系統了, 詳細是什麼就不多說了, 歡迎參考「📚【Docker】初探微服務時代的虛擬化技術」, 而我們使用Docker時, 有時候因為有AI的需求,需要載入別台機器的大容量模型, 但我們又不希望整個模型搬移, 浪費了兩台的空間, 這時候就我們可能會想說能不能直接將別台機器的檔案給掛載進來…, 就讓我們來實驗看看吧!

在進行操作之前有幾個元件需要先有個基本概念…

圖片來源

圖片來源

NFS

NFS (Network File System) 是一個用於在不同的計算機之間共享文件系統的網絡協議。它允許多台主機在共享網絡上訪問和共享相同的文件和目錄,就像它們本地存在一樣。這使得多台主機能夠共享數據和資源,並實現更高效的協作和數據共享。

簡單來說就是讓我們可以像存取本地目錄一樣的存取到遠端目錄。

Docker

輕量的虛擬化系統,讓我們快速啟動虛擬機,詳細請參考:

📚【Docker】初探微服務時代的虛擬化技術

怎麼做?

伺服端

安裝NFS服務

sudo apt-get update
sudo apt-get install nfs-kernel-server

編輯 /etc/exports 檔案並新增要共享的目錄,例如:

# 這裡代表將目錄共享給本地端IP
# rw代表可讀可寫
${需共享的目錄} ${欲共享的主機}(rw,sync,no_subtree_check)

重啟NFS服務

sudo service nfs-kernel-server restart

Client端

安裝NFS套件

sudo apt-get update
sudo apt-get install nfs-common

純Docker

在本地主機上創建一個目錄,用於掛載遠端目錄,例如:

sudo mkdir -p /mnt/${掛載的目錄名稱}

掛載遠端目錄到本地主機

sudo mount -t nfs REMOTE_HOST_IP:/path/on/remote/host /path/on/local/host

將遠端掛載目錄用volume的方式掛載到容器之中。

docker run -v /path/on/local/host:/path/in/container image_name

假如你是用docker compose來管理容器的話

version: '3'
services:
your_service:
image: your_image
volumes:
- nfsmount:/path/in/container
volumes:
nfsmount:
driver: local
driver_opts:
type: nfs
o: addr=${REMOTE_HOST_IP},nolock,soft,rw
device: ":/path/on/remote/host"

P.S 小技巧, 如果怎麼樣都掛載不成功, 可以先從本機目錄開始掛載起, 掛載完畢後, docker這一端就直接掛載本地目錄即可。

結語

大功告成, 透過簡單的遠端掛載, 可以讓我們有效利用空間減少硬體成本, 設計一台遠端機器效能不必太好,專門提供掛載空間, 而另一台機器則是算力強大的AI訓練機, 我們也不必頻繁的搬移模型, 只要透過掛載的方式, 那麼進行模型載入當下再進行傳輸即可, 不過也是有缺陷的, 就是初期載入較為久一點,畢竟是大模型啊…。

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?

歡迎加入一起練習寫作,賺取知識!

91會員
260內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!