有時候我們可能會有這樣的需求
docker容器產生的資料,如果不通過docker commit生成新的映象,使得資料做為映象的一部分儲存下來,那麼當容器刪除後,資料自然也就沒有了。
為了能儲存資料在docker中我們使用容器資料卷。
1、容器資料的持久化
2、容器之間繼承和共享資料
容器資料卷可以做到容器中的某乙個資料夾與宿主機中的某乙個資料夾共享
docker run -d -p 8111:8080 -v (本機資料夾):(容器資料夾)
[--privileged=true]
(映象名稱/映象id)
--privileged=true:不加的話會出現如下許可權問題
大家可以嘗試在該目錄下放乙個自己寫的html,結果也是一樣的。
作用:實現容器之間
的資料共享
原理:在宿主機上建立乙個公共的資料夾,使其他需要相互通訊的容器都依賴於這個資料夾,主要通過容器之間的 繼承關係 實現
問:在多個容器的相互依賴的過程中,若刪除了乙個容器,其他容器的資料會受到影響嗎?
答:其他容器的資料是不會受到影響的,除非你把宿主機的檔案刪除
實現三個centos之間共享宿主機中的同乙個資料夾
基於自定義的 dockerfile 檔案構造乙個 centos 映象1、dockerfile 檔案
# 基於cnetos 構造乙個映象
from centos
# 設定容器卷
volume [
"/mydata"
]cmd echo
"this is test,----------------success"
cmd /bin/bash
2、執行構建命令
# 基於dockerfile構建映象,-t:指定名稱和版本
docker build -t (映象名稱):(版本號)
(dockerfile檔案位置)
# 預設在當前路徑在找dockerfile檔案
docker build -t mycentos01:1.0 .
// 後面有個 .
# 若dockerfile的名稱不是dockerfile,則需要通過-f 指定
3、執行三個映象,os3 -->os2–>os1繼承執行
# 使用自己建立的映象啟動乙個容器
docker run -itd --name os1 mycentos01:1.0 /bin/bash
# 使用自己建立的映象啟動第二個容器繼承第乙個
docker run -itd --name os2 --volumes-
from os1 mycentos01:1.0 /bin/bash
# 使用自己建立的映象啟動第三個容器繼承第二個
4、分別進入三個容器的mydata資料夾建立三個檔案,分別為os1.txt、os2.txt、os3.txt
# 進入os1建立os1.txt
docker attach os1
cd /mydata
touch os1.txt
# 進入os2建立os2.txt
docker attach os2
cd /mydata
touch os2.txt
# 進入os3建立os3.txt
docker attach os3
cd /mydata
touch os3.txt
最後進入os1中可以看到分別在不同容器中建立的檔案
,說明實現了容器之間的資料共享
5、現在測試把os1刪除,檢視檔案還是否存在
可以看到檔案還是存在的
,進一步說明了docker容器間資料共享是通過在宿主機上建立資料夾實現的
6、最後使用命令檢視兩個容器的容器卷,找到在宿主機中檔案的位置進行對比
# 檢視容器卷
可以看到兩個容器的容器卷共享資料目錄的在宿主機中的位置都是相同的
docker網路 容器通訊 一看就會
1 兩個容器需要互相通訊 1 最簡單的就是ip相互訪問,依賴的是5大docker網路模式之一的bridge模式。但是容器的ip是不固定的,重啟或者重新生成等就會變化。2 link,容器互聯。不推薦 3 containerd網路模型,就是5大docker網路模式之一。docker run itd na...
正則基礎(一看就會)
正則 1.什麼是正則 正規表示式 規則表示式 regular expression 正則其實就是描述了一套規則,本質是操作字串。2.正則是幹什麼的?操作字串的 1 模式匹配 表單驗證 2 文字檢索 3 替換3.正則的好處 為什麼用它 簡單,方便 效能極高4.字串方法都有哪些 substring 開始...
紅黑樹 一看就會
red black tree是自平衡 非絕對平衡 的二叉查詢樹 先嘗試recolor,置色紅黑 再嘗試rotation 旋轉 插入新節點,標紅,如果為根節點,則標黑 如果不是根節點,且其parent是紅,uncle是紅 插入新節點,標紅,如果為根節點,則標黑 如果不是根節點,且其parent是紅,u...