首页
/
每日頭條
/
圖文
/
docker實現的是哪個級别的隔離
docker實現的是哪個級别的隔離
更新时间:2025-06-03 19:23:04

在Docker可視化管理:Portainer中文版 中,我提到了一個Volume,但是對于這個Volume我是一筆帶過了(其實那一步是可以不創建的,因為我後期的映射是采用絕對路徑進行),現在我們通過簡單的案例來了解一下這個“Volume”是個什麼小東西。

不使用Volume

首先創建一個nginx容器,命令如下:

docker run -dit --name=web -p 81:80 nginx

創建結果:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)1

創建nginx容器

然後我們訪問:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)2

訪問nginx服務

接着修改網頁内容:

docker exec -ti web /bin/bash echo 1 > /usr/share/nginx/html/index.html cd /etc/init.d/ ./nginx restart exit docker restart web

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)3

然後訪問:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)4

訪問修改後的頁面

這時候,網頁内容已經更改了,然後我們删除這個容器,重新創建它

docker rm -f web docker run -dit --name=web -p 81:80 nginx

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)5

删除并重新創建容器

再次訪問:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)6

訪問新創建的容器服務

這時候你會發現,之前修改的内容已經不見了,這個又是一個新的容器,那麼這是在不使用Volume的場景

使用自定義Volume

接下來我們使用-v參數去創建容器:

創建容器之前,我們先創建一個文件夾(确保沒數據)

mkdir /web/ docker run -dit --name=web -v /web/:/usr/share/nginx/html/ -p 81:80 nginx

執行結果:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)7

創建映射卷的容器

然後我們進入容器看一下:

docker exec -ti web /bin/bash cd /usr/share/nginx/html/ ls

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)8

查看容器服務數據目錄文件

從圖中我們可以看到,此時默認的數據(網頁文件)不見了,訪問網頁看一下:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)9

找不到文件,不過沒關系啊,我們回到宿主機創建網頁文件看看:

exit echo 'web' > /web/index.html

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)10

在宿主機創建網頁文件

再次訪問:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)11

訪問服務

這時候驚喜來了,我們在宿主機創建的文件直接應用在了容器裡面,而且我們不需要進入容器就能實現更改應用,到這裡是不是大概了解了Volume的作用了呢?還不了解的也沒關系,繼續往下看:

映射有數據的目錄到新建容器

現在我們把現在的容器删除掉,重新創建,然後繼續挂載這個目錄

docker rm -f web ls /web/ docker run -dit --name=web -v /web/:/usr/share/nginx/html/ -p 81:80 nginx

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)12

創建新的容器并挂載到有數據的目錄

然後再次訪問:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)13

這時候發現,剛剛新建的nginx容器服務無需進行任何操作就出現了之前手動修改的網頁文件内容,也就是說:

  • 當映射的本地目錄不存在數據的時候,對應的容器目錄默認數據會被删除并沒有任何文件
  • 當映射的本地目錄存在數據的時候,對應的容器目錄默認數據會被删除,本地的目錄文件會出現在容器的挂載目錄上

那麼這是自定義Volume的一個場景,接下來看一下Docker Volume的場景

使用docker Volume

docker Volume其實就是由Dokcer統一管理的卷,默認存放路徑為:

/var/lib/docker/volumes/

例如我完成一個volume生命周期:

ls /var/lib/docker/volumes/ docker volume create web ls /var/lib/docker/volumes/ docker volume rm web ls /var/lib/docker/volumes/

執行結果:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)14

Volume生命周期管理

可以看到,當我們創建一個新的Volume的時候,/var/lib/docker/volumes/目錄下就會出現對應的文件名名稱。

也就是說,Docker Volume其實就是設定一個默認的Volume路徑,然後創建删除volume都會在設定的目錄變化,

所以實際上我們使用-v指定絕對路徑跟-v指定卷名的作用是一樣的,隻是路徑不一定相同而已。

舉個例子:

我創建一個volume,在裡面寫入數據,然後映射

rm -rf /web/ #删除宿主機絕對路徑下的web docker rm -f web #删除存在的容器 docker volume create web #創建一個volume echo '/var/lib/docker/volumes/web/' > /var/lib/docker/volumes/web/index.html #寫入數據到volume docker run -dit --name=web -v web:/usr/share/nginx/html/ -p 81:80 nginx #創建容器

執行結果:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)15

細心的朋友可能發現我在映射本地路徑的時候,使用的是相對路徑web/,但是我當前目錄是沒有web/文件夾的,所以docker在創建的時候就是會自動去默認的volume路徑找。

創建成功之後,我們訪問網頁看下:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)16

訪問新的容器服務

此時,默認網頁出現在我們的面前,也就是說,剛才的echo寫入的文件沒有映射到這個容器,我們去看下是怎麼回事:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)17

問題找到了,通過docker volume映射的容器目錄并不會将volume根目錄的數據映射到容器的對應路徑,而是把volume下的_data映射到容器的工作目錄,所以我們需要修改的路徑應該再加一層

_data

然後我們繼續執行下面這台命令看一下:

echo '/var/lib/docker/volumes/web/' > /var/lib/docker/volumes/web/_data/index.html

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)18

然後再次訪問:

docker實現的是哪個級别的隔離(帶你了解Docker的Volume是什麼)19

此時,我們在本地修改的數據已經同步到了容器裡面了,所以到這裡你看懂這個volume了嗎?

還是不懂的話你可以把這個主機的volume雲服務器裡面的一個數據盤,即使雲服務器(容器)銷毀了,數據盤的數據不會随着雲服務器(容器)的銷毀而消失,這就是數據持久化,同時,volume支持多容器共享一個volume,這在某些場景是非常有用的。

想了解更多Docker、Linux、Python相關知識請關注我吧,也可以留言給我需要了解哪些知識,然後我可以根據你們的需求去定後續的文章!

如果覺得本文對你有幫助,請多多轉發評論,這是對我的一個最大的支持,也是我持續更新的動力,謝謝!

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
pdf标記高亮怎麼改顔色(如何給PDF添加不同顔色的高亮并添加注釋)
pdf标記高亮怎麼改顔色(如何給PDF添加不同顔色的高亮并添加注釋)
  我們在閱讀PDF文件的時候,經常需要給PDF文件添加高亮來突出突出重點,有時候,不同類型的重點需要不同的顔色來添加高亮或直接添加标注,那如何給PDF添加不同顔色的高亮并添加注釋?今天小編就給大家推薦一款非常好用的PDF工具“金閃PDF編輯器”。   手機端(安卓和IOS)給PDF添加高亮并添加注釋:   第1 步:在手機上下載金閃PDF編輯器并打開,在首...
2025-06-03
盛夏未來吳磊打碟張子楓後台(早報超有料盛夏未來張子楓吳磊CP感拉滿怒火)
盛夏未來吳磊打碟張子楓後台(早報超有料盛夏未來張子楓吳磊CP感拉滿怒火)
  新鮮資訊morning call 盡在早報超有料   新的一天,朋友們早上好呀。三伏天,伴随着偶爾的晴天與按時報道的暴雨,還是要靠空調才能“續命”。話不多說,說多了都是汗,一起來看看今天的早報吧~      預告搶鮮看丨張子楓吳磊《盛夏未來》曝新海報《怒火·重案》甄子丹謝霆鋒上演厮殺   昨日,由陳正道執導,張子楓、吳磊、郝蕾、祖峰等主演的青春電影《盛夏...
2025-06-03
steam求生之路2能氪金嗎(利益與良知的艱難選擇)
steam求生之路2能氪金嗎(利益與良知的艱難選擇)
  不知道大家還記不記得冒險解謎獨立遊戲《旁觀者》?反烏托邦題材的解謎遊戲,加上無處不在的監視與道德抉擇,選擇當好人自己就要死,當壞人卻又良心上過不去,玩過的小夥伴估計都非常印象深刻。這款備受好評的《旁觀者》官方微博宣布,《旁觀者2(Beholder 2)》的制作已經全面展開,并且遊戲已經在Steam上架,預計2018年發售,移動端也有可能跟上哦~     ...
2025-06-03
紫霞仙子沒能等到齊天大聖(紫霞仙子也沒等來的大英雄)
紫霞仙子沒能等到齊天大聖(紫霞仙子也沒等來的大英雄)
     "我知道有一天他會在一個萬衆矚目的情況下出現,身披金甲聖衣,腳踏七色雲彩來娶我。"   對《鳴鴻傳》中的王詩詩來說,這個人本不該是劉星雨。難以攀折的高齡之花,秋水閣的花魁,也是汴安第一美女的王詩詩無疑是一個令所有男人傾心的女子,她臉上的神情總是淡,七情上臉的都是小孩子,而她又像一個純真生動的小女孩,憧憬愛情,珍愛美貌,會對鏡自憐:"這世上真的有向你...
2025-06-03
這首歌是根據什麼歌曲改編的(這首周星馳寫的歌)
這首歌是根據什麼歌曲改編的(這首周星馳寫的歌)
     周星馳,一個被喜劇天賦所耽誤的天才音樂人。   他被很多喜愛他的影迷親切地稱為“星爺”,一是因為他現在年紀确實不小了,二是他在電影圈的地位确實挺高的,所以“星爺”二字的尊稱也算當之無愧。然而很多人都知道他是公認的香港喜劇之王,卻不知道原來擅長搞笑的周星星同學,原來還是一個出色的音樂人。      周星馳寫過一首歌,即電影《美人魚》的宣傳曲兼插曲《無...
2025-06-03
Copyright 2023-2025 - www.tftnews.com All Rights Reserved