搜尋
首頁運維Dockerdocker volume和掛載的差別是什麼

「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
docker中rm和rmi有什么区别docker中rm和rmi有什么区别Jul 14, 2022 am 11:02 AM

docker中rm和rmi的区别:rm命令用于删除一个或者多个容器,而rmi命令用于删除一个或者多个镜像;rm命令的语法为“docker rm [OPTIONS] CONTAINER [CONTAINER...]”,rmi命令的语法为“docker rmi [OPTIONS] IMAGE [IMAGE...]”。

docker官方镜像有哪些docker官方镜像有哪些May 12, 2022 pm 02:23 PM

docker官方镜像有:1、nginx,一个高性能的HTTP和反向代理服务;2、alpine,一个面向安全应用的轻量级Linux发行版;3、busybox,一个集成了三百多个常用Linux命令和工具的软件;4、ubuntu;5、PHP等等。

docker是免费的吗docker是免费的吗Jul 08, 2022 am 11:21 AM

docker对于小型企业、个人、教育和非商业开源项目来说是免费的;2021年8月31日,docker宣布“Docker Desktop”将转变“Docker Personal”,将只免费提供给小型企业、个人、教育和非商业开源项目使用,对于其他用例则需要付费订阅。

docker容器重启后数据会丢吗docker容器重启后数据会丢吗Jun 17, 2022 am 10:41 AM

docker容器重启后数据会丢失的;但是可以利用volume或者“data container”来实现数据持久化,在容器关闭之后可以利用“-v”或者“–volumes-from”重新使用以前的数据,docker也可挂载宿主机磁盘目录,用来永久存储数据。

docker能安装oracle吗docker能安装oracle吗Jul 08, 2022 pm 04:07 PM

docker能安装oracle。安装方法:1、拉取Oracle官方镜像,可以利用“docker images”查看镜像;2、启动容器后利用“docker exec -it oracle11g bash”进入容器,并且编辑环境变量;3、利用“sqlplus /nolog”进入oracle命令行即可。

docker存储空间不足怎么办docker存储空间不足怎么办Jul 22, 2022 pm 03:44 PM

解决方法:1、停止docker服务后,利用“rsync -avz /var/lib/docker 大磁盘目录/docker/lib/”将docker迁移到大容量磁盘中;2、编辑“/etc/docker/daemon.json”添加指定参数,将docker的目录迁移绑定;3、重载和重启docker服务即可。

什么是docker最早支持的存储引擎什么是docker最早支持的存储引擎May 12, 2022 pm 03:27 PM

AUFS是docker最早支持的存储引擎。AUFS是一种Union File System,是文件级的存储驱动,是Docker早期用的存储驱动,是Docker18.06版本之前,Ubuntu14.04版本前推荐的,支持xfs、ext4文件。

docker中的镜像会自动更新吗docker中的镜像会自动更新吗Jun 22, 2022 pm 04:23 PM

docker中的镜像会自动更新;可以利用Watchtower工具来自动更新镜像,Watchtower是一个可以监控正在运行的容器镜像是否更新的工具,当本地镜像与远程镜像有差异的时候,可以自动使用当前容器的运行参数以新镜像重新创建一个新的容器,并删除旧的容器。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),