?
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??🎬慕斯主頁:修仙—別有洞天
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???今日夜電波:秒針を噛む—ずっと真夜中でいいのに。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 0:34━━━━━━?💟──────── 4:20
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 🔄 ? ?? ? ? ? ?? ? ????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?💗關注👍點贊🙌收藏您的每一次鼓勵都是對我莫大的支持😍
?目錄
首先理解幾個概念
Docker存儲卷(Volume)是什么?
Docker卷的分類?
管理卷(Volumes)
管理卷的創建方式一:docker volume create
docker volume inspect
docker volume ls
docker volume rm
docker volume prune
管理卷的創建方式二:使用run的 -v 或者 --mount 指定創建管理卷
管理卷的創建方式三:Dockerfile 匿名卷
Docker 卷生命周期
Docker 卷共享
綁定卷(bind mount)
-v 參數創建卷
--mount 參數創建綁定卷
臨時卷
--tmpfs 創建
--mount 指定參數創建
臨時卷的作用
首先理解幾個概念
Docker存儲卷(Volume)是什么?
????????存儲卷就是將宿主機的本地文件系統中存在的某個目錄直接與容器內部的文件系統上的某一目錄建立綁定關系。這就意味著,當我們在容器中的這個目錄下寫入數據時,容器會將其內容直接寫入到宿主機上與此容器建立了綁定關系的目錄。
????????在宿主機上的這個與容器形成綁定關系的目錄被稱作存儲卷。卷的本質是文件或者目錄,它可以繞過默認的聯合文件系統,直接以文件或目錄的形式存在于宿主機上。
????????宿主機的/data/web 目錄與容器中的/container/data/web 目錄綁定關系,然后容器中的進程向這個目錄中寫數據時,是直接寫在宿主機的目錄上的,繞過容器文件系統與宿主機的文件系統建立關聯關系,使得可以在宿主機和容器內共享數據庫內容,讓容器直接訪問宿主機中的內容,也可以宿主機向容器寫入內容, 容器和宿主機的數據讀寫是同步的。大致圖示如下:
????????存儲卷大致在Docker架構中位于Docker daemon模塊中,不僅如此,Network、Compose也位于這個模塊中。再來回顧一下這個架構:
Docker卷的分類?
????????Docker提供了三種主要的方式來將數據從宿主機掛載到容器中,以便實現數據的持久化、共享和高效管理。這三種方式分別是:
Volumes(卷):
Volumes是由Docker管理的存儲卷,它們位于宿主機文件系統的一個特定路徑下,默認路徑是/var/lib/docker/volumes/。Volumes提供了數據的持久化存儲,即使容器被刪除,數據也得以保留。此外,Volumes可以被多個容器共享,且它們獨立于容器的生命周期。使用docker volume create命令可以創建新的卷,而docker run命令中的--mount或-v選項可以將卷掛載到容器中。
Bind Mounts(綁定掛載):
Bind mounts允許將宿主機上的任意目錄或文件掛載到容器內。與Volumes不同,bind mounts可以掛載宿主機文件系統的任何位置,這意味著非Docker進程也可以訪問和修改這些文件或目錄。這增加了靈活性但也帶來了潛在的安全風險。使用docker run命令的-v選項可以指定一個bind mount,例如-v /path/on/host:/path/in/container。
Tmpfs Mounts(內存掛載):
Tmpfs mounts是一種特殊的掛載類型,它們只存在于宿主機的內存中,不會寫入到宿主機的文件系統。這意味著當容器停止時,掛載在tmpfs中的任何數據都會丟失,不會持久化。Tmpfs mounts適用于那些不需要持久存儲且希望提高性能的場景,因為它們減少了磁盤I/O。使用docker run命令的--tmpfs選項可以創建一個tmpfs掛載。
管理卷(Volumes)
管理卷的創建方式一:docker volume create
用途: 創建一個新的Docker卷。
語法:
docker volume create [OPTIONS] [VOLUME]
關鍵參數:
--driver
或-d
: 指定創建卷時所用的驅動程序,如local
,nfs
,azurefile
等。--label
: 設置卷的元數據標簽。--name
: 顯式指定卷的名稱。--opt
或-o
: 設置驅動程序特定的選項,如存儲大小限制等。
示例:
docker volume create --name=my-vol
docker volume inspect
用途: 顯示一個或多個卷的詳細信息。
語法:
docker volume inspect [OPTIONS] VOLUME [VOLUME...]
關鍵參數:
--format -f
: 使用給定的 Go 模板格式化輸出。
示例:
docker volume inspect my-vol
docker volume ls
用途: 列出所有的Docker卷。
語法:
docker volume ls [OPTIONS]
關鍵參數:
--filter,-f
: 根據提供的條件過濾輸出,如label=production
。--format
:指定相應個格式,如 json,table。-q
: 僅顯示名稱
示例:
docker volume ls
docker volume rm
用途: 刪除一個或多個卷。
語法:
docker volume rm [OPTIONS] VOLUME [VOLUME...]
關鍵參數:
-f,--force
:強制刪除
示例:
docker volume rm my-vol
docker volume prune
用途: 刪除所有未被容器使用的卷(懸空卷)。
語法:
docker volume prune [OPTIONS]
關鍵參數:
--all
或-a
: 刪除所有卷,包括正在被容器使用的卷。--force
或-f
: 不提示確認,直接刪除。
示例:
docker volume prune
管理卷的創建方式二:使用run的 -v 或者 --mount 指定創建管理卷
-v 參數
? 功能:完成目錄映射
? 語法
docker run -v name:directory[:options] .........
? 參數
○ 第一個參數:卷名稱
○ 第二個參數:卷映射到容器的目錄
○ 第三個參數:選項,如 ro 表示 readonly
--mount 參數
? 功能:完成目錄映射
? 語法
docker run --mount '<key>=<value>,<key>=<value>' .........
? 參數
○ type : 類型表示 bind, volume, or tmpfs
○ source , src :對于命名卷,這是卷的名稱。對于匿名卷,省略此字段。
○ destination, dst,target:文件或目錄掛載在容器中的路徑
○ ro,readonly: 只讀方式掛載
管理卷的創建方式三:Dockerfile 匿名卷
????????我們也可以通過 dockerfile 的 VOLUME 指令在鏡像中創建 Data Volume,這樣只要通過該鏡像創建的容器都會存在掛載點,但值得注意的是通過 VOLUME 指令創建的掛載點,無法指定主機上對應的目錄,而是由 docker 隨機生成的
Docker 卷生命周期
????????當我們創建了管理卷并啟動啟動容器后,如果我們將運行著的容器給刪除,我們的管理卷并不會直接跟著被刪除,而是只有在自己使用docker volume rm 指令后才會被刪除。
?
Docker 卷共享
????????當多個容器掛載相同名字的管理卷或者宿主機相同位置的卷時,他們會共享同一個卷,如果卷的內容被修改則所有的容器中改卷對應數據的數據也會被修改。
例如如下兩個容器都是掛載了同一個卷:
docker run -v my-volume:/data container1
docker run -v my-volume:/data container2
綁定卷(bind mount)
????????需要注意的是綁定卷是以宿主機的目錄為主的,如果你的宿主機中要綁定的目錄下擁有文件,則容器中也會存在文件,若沒有文件而你的容器中有文件則容器中的文件也會變成沒有文件。
-v 參數創建卷
? 功能:
完成卷映射
? 語法
docker run -v name:directory[:options] .........
? 參數
○ 第一個參數: 宿主機目錄,這個和管理卷是不一樣的
○ 第二個參數:卷映射到容器的目錄
○ 第三個參數:選項,如 ro 表示 readonly
--mount 參數創建綁定卷
? 功能:
完成目錄映射
? 語法
--mount '<key>=<value>,<key>=<value>'
? 關鍵參數
○ type : 類型表示 bind, volume, or tmpfs
○ source , src : 宿主機目錄,這個和管理卷是不一樣的。
○ destination, dst,target:文件或目錄掛載在容器中的路徑
○ ro,readonly: 只讀方式掛載
臨時卷
????????臨時卷數據位于內存中,在容器和宿主機之外。 tmpfs 局限性:不同于卷和綁定掛載,不能在容器之間共享 tmpfs 掛載。這個功能只有在 Linux 上運行 Docker 時才可用。需要注意的是:如果我們讓臨時卷掛載到已經存在的目錄里將會以臨時卷為主,如果放入比設置了大小的臨時卷還大的文件將會報錯,顯示空間不足!
--tmpfs 創建
? 功能:
完成臨時卷映射
? 語法
--tmpfs /app
--mount 指定參數創建
? 功能:
完成目錄映射
? 語法
--mount '<key>=<value>,<key>=<value>'
? 關鍵參數
○ type : 類型表示 bind, volume, or tmpfs
○ destination, dst,target:掛載在容器中的路徑
○ tmpfs-size: tmpfs 掛載的大小(以字節為單位)。默認無限制。
○ tmpfs-mode: tmpfs 的八進制文件模式。例如, 700 或 0770。默認為 1777或全局可寫。
臨時卷的作用
????????在看完上面的示例后你可能覺得臨時卷沒什么作用,實際上臨時卷是可以提高我們的文件安全性的,普通的容器上的文件其實是可以在我們宿主機上搜索到的如:find -name命令,但是臨時卷中的問卷是找不到的,如下:
?
?
????????????????????? 感謝你耐心的看到這里?( ′・?・` )比心,如有哪里有錯誤請踢一腳作者o(╥﹏╥)o!?
????????????????????????????????? ? ? ??
????????????????????????????????????????????????????????????????????????給個三連再走嘛~??