使用 Docker Volume 的功能 (一)

使用 Docker Volume 的功能 (一)

在執行Docker Container 的時侯檔案系統會分為Image 層、Init 層以及可讀可寫層這三個部份,當Docker Container 刪除掉之後,存放在Docker Container 上的資料也就會跟著刪除掉,因此需要把不想要被刪除掉的資料存放在實體機器上,避免資料不見的問題。

主要實作如何使用 Docker 的 Volume 功能,把資料寫入到實體機器上,主要的方式有二個方法:

在執行 docker run 指令時加上 -v 參數,使得 Container 裡面的檔案路徑Mapping 到實體主機的檔案路徑。

在撰寫 Dockerfile 時,加入 VOLUME 指令,做到把資料存放在實體的主機上。使用這種方法需要搭配 docker inspect 指令,才能查詢到實體主機檔案的存放路徑在哪。

Example1:

在使用 docker run 指令時,指定 -v 參數,使得實體主機的文件夾路徑 Mapping 到 Container 的文件夾路徑,指令如下

使用 Docker Volume 的功能 (一)

/home/user1/storage 是實體主機的文件夾路徑 Mapping 到 Container 裡面的 /storage 文件夾路徑。

執行畫面如下:

使用 Docker Volume 的功能 (一)

我們就會在上個畫面中的左邊視窗看到執行 docker run 指令時使用 -v參數 Mapping 到實體主機的 /home/user1/storage 的文件夾。然後在右邊視窗中的實體主機 /home/user1/storage 的文件夾建立一個 helloworld.txt 的檔案,最後再回到左邊視窗的 Container 裡面的 /storage 文件夾去看 helloworld.txt 的檔案已經存在了。

Example2:

在使用 docker run 指令時,指定 -v參數,但是沒有指定實體主機的檔案路徑,指令如下

使用 Docker Volume 的功能 (一)

使用以上的指令會發現到沒有指定實體主機的文件夾路徑,那資料會跑到哪裡去了呢?

要回答這個答案之前需要先使用 docker volume ls 可以看到如下的畫面

使用 Docker Volume 的功能 (一)

上圖就是一個 Container 的 Volume,如果要找到在實體主機真實的文件夾路徑,可以使用以下的指令:

使用 Docker Volume 的功能 (一)

4c2a9ef663c2 是 Container 的 ID

執行畫面如下

使用 Docker Volume 的功能 (一)

上圖就可以找到Volume 在實體主機的真實路徑,這時侯就可以使用cd command 切進上圖查詢出來的文件夾路徑並且寫入一個檔案在此文件夾,但是要注意使用者權限的問題,這裡是直接切換成root 權限,如下圖:

使用 Docker Volume 的功能 (一)

從上圖就可以看到helloworld.txt的檔案有在 container上出現,也就有成功的把 Volume 這個功能執行起來。

今天已經介紹瞭如何使用 docker run,指令把Container 的文件夾 Mapping 到實體機器上,明天要繼續介紹的部份是透過使用撰寫 Dockerfile 的方式把 Volume 掛載起來。


分享到:


相關文章: