2017-06-12 104 views
1

我剛剛通過Docker文檔閱讀,並試圖更好地理解Docker數據卷,以至於文檔有點模糊。Docker數據卷和掛載到主機

這是我的理解有兩種方法可以安裝一個碼頭工人卷:

  • 簡單的安裝(例如docker run -it -v /data --name container1 busybox);和
  • 安裝到主機(如docker run -it --name container1 -v /path/on/host:/datavol busybox

但是,爲了在卷裏的容器重新啓動,甚至換出容器堅持(舊容器被刪除,新創建/啓動),也不會在在這兩種方法中,卷必須安裝到主機?!?換句話說,如果我沒有通過「簡單安裝方法」顯式安裝到主機,那麼實際安裝的卷在哪裏?這個位置如何在容器交換中倖存下來?

另外,在這兩種情況下,我都假定卷只是給定主機的本地卷,並且如果您有一個Swarm或羣集運行在多個主機上,則無法使用這些命令,以便在不同主機上運行容器可以訪問這些卷,是嗎? (我猜這是Data Volume Containers發揮作用的地方,對吧?)提前致謝!

回答

1

這兩種方法都不會將卷掛載到主機上嗎?

是的,這兩種方法都基於容器生命週期中保持的主機目錄。

使用這些命令來獲得更多信息:

docker volume ls 
docker volume inspect <volume-id> 
# and 
docker inspect <container-id> 

(方法1),其中體積實際上被安裝到?

這樣做:

docker inspect <container-id> 

你的回答是 「源」:

"Mounts": [ 
      { 
       "Type": "volume", 
       "Name": "96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001", 
       "Source": "/var/lib/docker/volumes/96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001/_data", 
       "Destination": "/data", 
       "Driver": "local", 
       "Mode": "", 
       "RW": true, 
       "Propagation": "" 
      } 
     ], 

請注意,如果你是在OSX或Windows中,源是指內部的本地目錄運行docker的VM。

而這個位置如何在容器換出時倖存下來?

因爲它們基於主機的本地目錄(因爲它們存在,所以它們是卷),所以它們能夠存活。

如果您的羣集或羣集運行在多個主機上,那麼無法使用這些命令,以便運行在不同主機上的容器可以訪問這些卷,是的?

對於簡單的卷配置,您是正確的。這是碼頭變得棘手,持久性的地方。您可以在主機文件系統級別實施共享目錄,然後將其作爲卷裝入容器中,以便跨羣集主機獲取共享卷。

https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-shared-storage-volume-as-a-data-volume