目錄
docker volume和掛載的區別是什麼
首頁 運維 Docker docker volume和掛載的差別是什麼

docker volume和掛載的差別是什麼

Mar 08, 2022 pm 04:53 PM
docker

「docker volume」和掛載的區別是:「docker volume」是宣告式的,「Docker Engine」本身會佔用系統的某個目錄,Docker會預設在佔用的路徑下為volume分配一個路徑;而掛載不會佔用一個路徑作為掛載點。

docker volume和掛載的差別是什麼

本教學操作環境:linux7.3系統、docker-1.13.1版、Dell G3電腦。

docker volume和掛載的區別是什麼

#一直一來,對於多個容器需要共享存取相同資料目錄,或者需要持久化容器內資料(如資料庫)時,我們都是採用掛載目錄形式(bind mounts),將宿主機的某一目錄掛載到容器內的指定目錄,這種方式能解決問題,但這種方式也一直有一些缺點:

  • 容器在不同的伺服器部署需要根據實際磁碟掛載目錄修改路徑
  • 不同作業系統的檔案和目錄權限會搞得你昏頭轉向,火冒三丈 ?

而這些問題,使用Volume就可以解決。我們先來比較一下bind mounts和docker volume,然後看volume是如何解決bind mounts的問題的。先來看一張圖:

docker volume和掛載的差別是什麼
此圖來自docker文件

這圖說明bind mount和volume其實都是利用宿主機的檔案系統,不同之處在於volume是docker自身管理的目錄中的子目錄,所以不存在權限引發的掛載的問題,並且目錄路徑是docker自身管理的,所以也不需要在不同的伺服器上指定不同的路徑,你不需要關心路徑(其實也不全是,下面會關心?)。接下來就來看看bind mount和volume的不同用法吧。

1. 容器在不同的伺服器部署需要根據實際磁碟掛載目錄修改路徑

例如:

在Linux系統中,我們經常使用"/var/someDir"作為掛載目錄;

然而到了Mac上,/var/ 並不是真實存在的目錄,Mac用戶會告訴你,我們比Linux更先進,我們不用/var/ ,使用者不需要;

在Windows系統中,Windows使用者會反問你:/var/ 是什麼? C盤、D盤是最合理的分法~

大家都說自己最帥,到底誰是最帥的
mac中var目錄是一個軟連結

2. 不同作業系統的檔案與目錄權限會搞得你昏頭轉向,火冒三丈 ?

本來在Linux系統中測試的挺好,結果到了Windows上掛載路徑各種問題,這裡就不一一細說了,沒有遇到這些問題的可以嘗試一下,體驗體驗。不過在Mac中還好一些,畢竟和Linux同宗。

Docker中除了掛載方式,還有一種Volume可以持久化數據,說到這裡有點汗顏,使用Docker這麼久,一直把掛載當成Volume,不過也不怪我,Docker-compose檔案中在volume段中寫容器和宿主機掛載路徑映射關係也沒問題,就一直這麼誤解了。 。 (花式甩鍋?)

其實「掛載」和「Docker Volume」並不是一回事,有一定的區別,Docker Volume是聲明式的, Docker Engine本身會佔用系統的某個目錄,Linux一般為"/var/lib/docker",Mac和Windows下都可以調節。當我們宣告一個volume,Docker會預設在佔用的路徑下為volume分配一個路徑,例如:

#標題
##相對於掛載,volume是Docker Engine在自己的「地盤」分配了一個路徑作為掛載點,自己地盤的權限肯定是安排的明明白白。所以,以上掛載宿主機路徑的問題都解決了。 ?

在使用時,直接用volume名稱代替宿主機路徑名就行,假設我們上面創建了名為"test_vol"的volume:

  1. docker run -d -v "test_vol:/var/data" some_image,這樣就將容器內的/var/data目錄掛載到了"test_vol"的掛載點;
  2. docker-compose中類似,不過要在docker-compose.yaml檔案中宣告volume,我們還是拿上面的範例修改一下:

Attention !! 

  1. 需要注意volume 會造成docker目錄膨脹,因為既要存鏡像,又要存volume,最好不要放在系統盤,將docker 的安裝目錄配置到其他更大的掛載碟。
  2. 兩者有一個不同的行為:當容器外的對應目錄是空的,volume會先將容器內的內容拷貝到容器外目錄,而mount會將外部的目錄覆蓋容器內部目錄! !
  3. volume 還有一個不如bind mount的地方,不能直接掛載文件,例如掛載nginx容器的設定檔:nginx.conf。

這裡需要說明,類似於配置文件這種單文件方式並不適合使用volume,bind mount雖然也可以解決,但由於config文件中包含一些類似於數據庫密碼等敏感信息,因此,最好的方式是使用tmpfs。

kubernetes的volume也體現出類似的設計,subPath雖然可以解決設定檔掛載的問題,但實際上最好的方式是使用configMap。

推薦學習:《docker影片教學

以上是docker volume和掛載的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

docker怎麼退出容器 docker怎麼退出容器 Apr 15, 2025 pm 12:15 PM

退出 Docker 容器的四種方法:容器終端中使用 Ctrl D 快捷鍵容器終端中輸入 exit 命令宿主機終端中使用 docker stop <container_name> 命令宿主機終端中使用 docker kill <container_name> 命令(強制退出)

docker內的文件怎麼拷貝到外面 docker內的文件怎麼拷貝到外面 Apr 15, 2025 pm 12:12 PM

Docker 中將文件拷貝到外部主機的方法:使用 docker cp 命令:執行 docker cp [選項] <容器路徑> <主機路徑>。使用數據卷:在主機上創建目錄,在創建容器時使用 -v 參數掛載該目錄到容器內,實現文件雙向同步。

docker容器名稱怎麼查 docker容器名稱怎麼查 Apr 15, 2025 pm 12:21 PM

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

docker怎麼重啟 docker怎麼重啟 Apr 15, 2025 pm 12:06 PM

重啟 Docker 容器的方法:獲取容器 ID(docker ps);停止容器(docker stop <container_id>);啟動容器(docker start <container_id>);驗證重啟成功(docker ps)。其他方法:Docker Compose(docker-compose restart)或 Docker API(參考 Docker 文檔)。

docker怎麼啟動mysql docker怎麼啟動mysql Apr 15, 2025 pm 12:09 PM

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

docker怎麼更新鏡像 docker怎麼更新鏡像 Apr 15, 2025 pm 12:03 PM

更新 Docker 鏡像的步驟如下:拉取最新鏡像標記新鏡像為特定標籤刪除舊鏡像(可選)重新啟動容器(如果需要)

docker怎麼啟動容器 docker怎麼啟動容器 Apr 15, 2025 pm 12:27 PM

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

docker怎麼創建容器 docker怎麼創建容器 Apr 15, 2025 pm 12:18 PM

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

See all articles