簡體   English   中英

Dockerfile中的Docker卷和VOLUME

[英]docker volume and VOLUME inside Dockerfile

我對創建docker volume create my-volVOLUME ["/var/www"]之間的區別感到困惑。

我的理解是:

1) docker volume create my-vol在我們的機器上創建一個持久卷,每個容器都可以鏈接到my-vol

2) VOLUME ["/var/www"]在其容器內創建一個卷。

當我創建另一個容器時,可以按以下方式鏈接my-vol :運行容器時

 $ docker run -d --name devtest --mount source=myvol2,target=/app nginx:latest 

那時,如果我在Dockerfile中添加了VOLUME ["/var/www"] ,則此docker文件的所有數據都將存儲在myvol2/var/www

Dockerfile VOLUME命令說兩件事:

  1. 如果操作員未在特定容器目錄上顯式安裝卷,則無論如何都在其中創建一個匿名卷。

  2. Dockerfile步驟將永遠無法對該目錄樹進行進一步更改。

作為操作員,您可以使用docker run -v選項將卷(命名卷或主機目錄)安裝到容器中。 您可以將其掛載到容器中的任何目錄上,而不管Dockerfile中是否為它聲明了VOLUME

(因為無論您是否聲明VOLUME ,都可以使用docker run -v ,並且它具有令人困惑的副作用,所以我通常會避免在Dockerfiles中聲明VOLUME 。)

就像在普通Linux中一樣,在任何給定目錄上只能(有用地)安裝一件事。 使用您描述的設置,數據將存儲在您創建並安裝的myvol2 ,並且可以在容器的/var/www中看到,但是數據實際上僅存儲在一個位置。 如果刪除並重新創建沒有卷掛載的容器,則數據將不再存在。

Docker中使用兩種類型的持久性存儲,第一種是Docker Volumes,第二種是綁定裝載。 它們之間的區別在於,卷是Docker內部的並存儲在Docker存儲中(通常位於/ var / lib / docker下),而綁定裝載使用計算機上的物理位置存儲持久數據。

如果要對nginx使用Docker卷:

docker卷創建nginx-vol

docker運行-d --name devtest -v nginx-vol:/ usr / share / nginx / html nginx

如果要使用綁定安裝:

docker run -d --name devtest -v [路徑]:/ usr / share / nginx / html nginx

[path]是您要存儲容器數據的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM