簡體   English   中英

結合 VOLUME + docker 運行 -v

[英]Combing VOLUME + docker run -v

在編寫 Dockerfile 時,我正在尋找關於 VOLUME 條目的解釋並遇到了這個聲明

卷是存儲在/var/lib/docker/volumes/...中的持久數據

您可以在Dockerfile中聲明它,這意味着每次從映像啟動容器時,都會創建卷(空),即使您沒有任何-v選項。

您可以在運行時docker run -v [host-dir:]container-dir上聲明它。 將兩者結合起來( VOLUME + docker run -v )意味着您可以將主機文件夾的內容安裝到/var/lib/docker/volumes/...

docker volume create創建卷,而無需定義Dockerfile並構建映像並運行容器。 它用於快速允許其他容器掛載所述卷。

但我很難理解這條線:

...結合兩者( VOLUME + docker run -v )意味着您可以將主機文件夾的內容安裝到由/var/lib/docker/volumes/...中的容器保存的卷中

例如,假設我的主機上有一個配置文件,我根據我使用Dockerfile的映像運行容器。 它會將配置文件復制到我在卷條目中聲明的卷中嗎?

會不會像(偽代碼)

#dockerfile
From Ubuntu

Run apt-get update

Run apt-get install mysql

Volume . /etc/mysql/conf.d

Cmd systemcl start MySQL

當我運行它時

docker run -it -v /path/to/config/file:  ubuntu_based_image

這是他們的意思嗎?

  • 您可能不想在 Dockerfile 中使用VOLUME 沒有必要在運行時掛載文件或目錄,並且它具有令人困惑的副作用,例如使后續的RUN命令靜默丟失 state。

  • 如果一個鏡像確實有一個VOLUME ,並且當你啟動容器時你沒有掛載其他任何東西,Docker 將創建一個匿名卷並為你掛載它。 如果您不清理這些卷,這可能會導致空間泄漏。

  • 您可以在任何容器目錄上使用docker run -v選項,無論它是否被聲明為VOLUME

  • 如果你docker run -v /host/path:/container/path ,這兩個目錄其實是一樣的; 沒有任何內容被復制,並且對其中一個的寫入(應該是)在另一個上立即可見。

  • docker run -v /host/path:/container/path綁定掛載在/var/lib/docker docker 中根本不可見。

  • 您通常不應該查看/var/lib/docker中的內容(如果您不在本機 Linux 主機上,則不能查看)。 如果您需要直接訪問卷文件內容,請使用綁定掛載而不是命名或匿名卷。

  • 像您展示的那樣綁定掛載適用於將配置文件注入容器,以及將日志文件讀回。 命名卷適用於有狀態應用程序的存儲,例如 MySQL 數據庫的數據。 兩種類型的卷都不適合代碼或庫; 而是將它們直接構建到 Docker 圖像中。

暫無
暫無

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

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