上篇已經介紹瞭如何使用在執行docker run 指令,把Volume Mount 起來使得Container 的文件夾路徑可以Mapping 到實體主機的文件夾路徑,今天要介紹的部份是透過撰寫Dockerfile 的方式使用Volume 的指令,這樣使用者就不用在執行docker run 指令時指定-v 參數,就可以把Volume Mount 起來。
另外今天還會 Demo 如何讓 Container 之間的資料共享
Example1:
撰寫一個Dockerfile 使用VOLUME 指令,把Docker的Image Build起來,然後啟動Docker Container,把資料寫進在Docker Container裡面,最後使用docker inspect 指令,找到Mapping 到實體主機的文件夾路徑,確認是否有看到之前寫在Container 裡面的檔案。
Dockerfile 如下
另外在 VOLUME 指令的寫法可以寫成多個路徑,如下
Build Image 指令如下
輸入 docker build 指令時,文件夾要切換到和 Dockerfile 檔案同一層的文件夾路徑,Build 完 Image 之後的結果如下畫面
啟動 Docker Container 指令如下
因為 VOLUME 已經寫在 Dockerfile 裡,所以在使用 docker run 指令時沒有給 -v 參數
在 Container 裡面寫入一個檔案,如下畫面
在實體主機上使用 docker inspect 指令,找到 Volume 在實體主機的文件夾路徑
e2987aaab700 為 ContainerID,也可以使用指定 Container Name 的方式
使用 root 權限,切換到 Volume 的實體主機的文件夾路徑之後,可以看到在第4步驟在 Container 裡面寫的檔案,也可以在實體主機的文件夾看到 helloworld.txt 的檔案,畫面如下
Example2:
如何讓 Container 和 Container 之間的資料共享,可以使用以下的方式
啟動第一個 Container 指令如下
啟動第二個 Container 指令如下
--volumes-from 參數指定 Container Name 為 Container1 的 Volume 資料和Container2 做共享
測試二個 Container 之間資料是否能共享,畫面如下
左邊的Container1 切換到/data 資料夾之後建立一個helloworld.txt 的檔案,之後在右邊的Container2 切換到/data 資料夾之後查看helloworld.txt 的檔案內容為HELLOWORLD,這樣就代表了Container 之間的資料有做到共享的效果。
今天介紹了 Dockerfile Volume 的用法以及 Container 之間的資料做共享,不用另外的架設 file server 就可以分享資料,使資料在使用上更加的方便,對於在備份資料方面也更加的簡單。
閱讀更多 Java高級開發工程師 的文章