深入理解Docker Volume(二)


  一開始,認為Volume是用來持久化的,但是這實際上不對,因為認為Volume是用來持久化的同學一定是認為容器無法持久化,所以有了Volume來幫助容器持久化,事實上,容器會一直存在,除非你刪除他們.

   容器是持久的,直到你刪除他們,並且你只能這么做:

 
  1. $docker rm my_contariner  

如果你沒有執行此命令,那么你的容器會一直存在,依舊可以啟動,停止等.如果你找不到容器,可以運行

 
  1. $docker ps -a  

Docker ps只能顯示正在運行的容器,但是容器也會處於停止狀態,這種情況下,上面的命令會顯示所有的容器,無論他們處於什么狀態.docker run...命令可以有很多的組合(它提供了Docker容器從創建到啟動的所有功能),它會創建一個新的容器,然后啟動它.

所以說,Volume不是為了持久化.

什么是Voume

Volume可以將容器以及容器纏身的數據分離開來,這樣的話,當你使用docker rm my_container刪除容器時,不會影響相關的數據.

Volume可以使用下面兩種方式創建:

1.在Dockerfile指定VOLUME /some/dir

2.執行docker run -v /some/dir命令指定

無論哪種方式都是做了同樣的事情.他們告訴Docker在主機上創建一個目錄(默認情況下是在/var/lib/docker),然后將其掛載到指定的路徑(本例中是:/some/dir).當刪除使用該Volume的容器時,Volume本身不會受到影響,它可以一直存在下去.

如果在容器中不存在指定的目錄,那么該目錄將會被自動創建.

你可以告訴Docker同時刪除容器和Volume:

  1. $docker rm -v my_container 

有時候,你想在容器中使用主機上的某個目錄,你可以通過其他的參數來指定:

  1. $docker run -v /host/path:/some/path...  

這就明確的告訴Docker使用指定的主機路徑來代替Docker床架你的根路徑並掛載到容器內指定的路徑(上例中是/some/dir).需要注意的是,這種方式同樣支持問文件.在Docker術語中,這通常被稱為bind-mounts.如果主機上的路徑不存在,目錄將自動在給定的路徑中創建.

容器也可以與其他容器共享Volume:

  1. $docker run --name my_container -v /some/path ...  
  2.    
  3. $docker run --volumes-from my_container --name my_contaner2 ...  
 上面你的案例將告訴Docker從第一個容器掛載相同的Volume到第二個容器,它可以在兩個容器之間共享數據.

如果你執行docker rm -v my_container命令,而上面的第二容器依然存在,那Volume就不會刪除,如果你不使用docker rm -v my_container2刪除第二個容器,那么這個Volume就是一直存在.

繼續補充,因為VOLUME實際上就是在本地新建了一個文件夾掛載了,那么實際上容器內部的文件夾有三種情況:
1、沒有指定VOLUME也沒有指定-v,這種是普通文件夾。
2、指定了VOLUME沒有指定-v,這種文件夾可以在不同容器之間共享,但是無法在本地修改。
3、指定了-v的文件夾,這種文件夾可以在不同容器之間共享,且可以在本地修改。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM