天天看點

Docker 資料卷操作以及挂載nginx

Docker 資料卷操作

  • ​​資料卷技術的引出​​
  • ​​建立資料卷與删除​​
  • ​​資料卷的挂載​​

資料卷技術的引出

我們需要明白docker鏡像的一些特點。我們裝載在docker上的鏡像的權限隻是可讀的。是不可以修改的。

你想啊!我們會基于鏡像建立容器并啟動,如果鏡像檔案可以被任意修改的話就會出現衣蛾問題。總之,docker中安裝的鏡像檔案是不能夠被修改的。

我們運作的容器程式隻是基于鏡像的基礎,容器之間互相隔離。

當我們需要修改我們的運作着的容器的時候,我們需要進到容器裡去修改容器中的檔案。步驟比較繁瑣,而且這樣的修改隻是基于隻讀的權限建立的一個新的讀寫層。這個讀寫層并沒有對原隻讀權限的層次造成影響。但是這個修改隻是暫時的,當我們重新開機容器或者删除容器的時候,原來的配置更改就會消失。

是以我們提出一種資料卷的技術。

那麼資料卷可以做到哪些呢?

資料卷可供一個多個容器去使用,它有一些特性,可以實作在容器之間的共享和複用,還有,我們修改了資料卷後,這個資料卷會立馬生效。并且不會影響到鏡像,當然也是不可能影響到鏡像的,并且不會随着容器的删除而消失。

Docker 資料卷操作以及挂載nginx

到這裡你先明白它的大概,下面我們開始介紹它的具體用法你就知道它可以幹嘛了,他到底起到什麼樣的作用。

建立資料卷與删除

首先我們建立一個資料卷

docker      
Docker 資料卷操作以及挂載nginx

你可以檢視自己建立的資料卷有沒有成功,或者說,你目前目錄下有哪些資料卷。

docker volume ls      
Docker 資料卷操作以及挂載nginx

檢視指定資料卷的具體的詳細的資訊

docker      
Docker 資料卷操作以及挂載nginx

紅色這邊标記資料卷在主控端的目錄位置

當然你也可以去删除資料卷

docker volume rm      

這時如果顯示你的這個卷正在被使用。你該怎麼辦?

Docker 資料卷操作以及挂載nginx

這是因為你的資料卷被使用了,你不能删除它。你必須删除容器後,才可以删除它。

你可以使用指令來列出目前運作的容器

顯示所有的容器,包括未運作的

docker ps      

你可以不對比容器id來找到是哪個容器在使用到資料卷,注意這裡你不要比對id的全部字元串,因為字元串太長,他這裡是顯示不完整的,你隻要比對出現的這幾位即可

Docker 資料卷操作以及挂載nginx

現在我們找到了是我的nginx的一個容器使用到了,我将這個容器删掉,注意這個容器正在運作,我們可以加上-f對其删除。

Docker 資料卷操作以及挂載nginx

然後我們删除資料卷

Docker 資料卷操作以及挂載nginx

你看這樣就删除成功了

然後你确認一下,現在html資料卷就沒有了。

Docker 資料卷操作以及挂載nginx

還有一個删除可以删除所有沒有使用到的資料卷

docker      
Docker 資料卷操作以及挂載nginx
Docker 資料卷操作以及挂載nginx

現在就什麼也沒有了

資料卷的挂載

在我們沒有使用資料卷的時候我們是直接運作容器然後指定資料卷的,現在可以進行一個對資料卷的挂載,也就是叫資料卷挂載到我們容器中。

docker run --name nginx_test03 -v html:/usr/share/nginx/html -p 8092:80 -d nginx      
Docker 資料卷操作以及挂載nginx

docker run 代表建立并運作容器

– name 指定常見容器的名字

-v 指定對資料卷進行挂載

-p指定映射端口

-d 代表背景運作

上面這行指令可以執行将資料卷建立出來并挂載的操作,是以我們不需要去單獨建立了。

我們将資料卷挂載了,現在我們進入資料卷的位置,看看到底有沒有挂在上。

我們先檢視html資料卷的位置

docker      
Docker 資料卷操作以及挂載nginx

我們進入到這個目錄

cd      

然後ls檢視目前目錄

ls      

整體效果

Docker 資料卷操作以及挂載nginx

我們可以看到資料卷已經成功挂載好了,index.html是nginx的預設啟動頁面。這樣當你去想要修改nginx的啟動頁的時候你直接在資料卷中修改就好了。

現在我們檢視這個index.html

cat      

紅色·标記是預設啟動歡迎的頁面英文

Docker 資料卷操作以及挂載nginx

我們嘗試先做一個通路,在這之前,你先需要開放你運作這個容器開放的端口。我的是8092

你可以先檢視防火牆狀态,防火牆一般是必然在運作的,特别是伺服器,如果你是本地虛拟機的話,直接關閉防火牆就直接不用擔心防火牆的端口限制了。

firewall-cmd --state      

我們可以檢視目前防火牆開放了哪些端口号

=public --list-ports      

可以看到現在我們的8092端口沒有被開放,現在我們需要進行開放。

Docker 資料卷操作以及挂載nginx
firewall-cmd --zone=public --add-port=8092/tcp --permanent      

然後我們呢,讓防火牆重新加載配置,讓它生效

firewall-cmd --reload      

然後我們再次檢視防火牆目前開放的端口

firewall-cmd --zone=public --list-ports      
Docker 資料卷操作以及挂載nginx

好,現在我們去通路,公網ip+端口号

如果你的是通過FinalShell連接配接遠端伺服器的話,怎麼檢視自己伺服器的公網呢?不必去再登入阿裡雲再去檢視了。

curl      
Docker 資料卷操作以及挂載nginx

好現在通路

Docker 資料卷操作以及挂載nginx

你看這麼界面就是這樣子。

我們現在在資料卷進行一個修改,如果你忘記資料卷在哪裡,

這些指令我們上面也都提到過

Docker 資料卷操作以及挂載nginx

我們可以用我們的vim指令,沒有的話自己去下載下傳一個

vim      
Docker 資料卷操作以及挂載nginx

當然你還可以用FinalShell在檔案目錄打開編輯也比較舒服。這些你都可以選的。你甚至可以用你本機的編輯器。

Docker 資料卷操作以及挂載nginx
Docker 資料卷操作以及挂載nginx

用編輯器修改後儲存就可以了。

Docker 資料卷操作以及挂載nginx

你現在再去重新整理原來通路位址會發現立馬就變了,就是這麼同步,這就是資料卷的魅力。

繼續閱讀