Docker 管理應用資料
卷是持久化 Docker 容器產生和使用的資料的首選方式。繫結掛載依賴主機機器的目錄結構,而卷則完全由 Docker 管理。和繫結掛載相比,卷由幾個優勢:
- 卷比繫結掛載更容易備份和遷移。
- 可以通過 Docker CLI 或 Docker API 管理卷。
- 卷在 Linux 或 Windows 容器中都可以工作。
- 在多個容器之間共享時,卷更安全。
- 卷驅動程式允許你在遠端主機或雲端儲存卷,加密卷內容或增加其他功能。
- 一個新卷的內容可以由容器預填充。
此外,和在容器的可寫層持久化資料相比,卷通常是更好的選擇,因為使用卷不會增加容器的體積,並且卷的內容脫離指定容器的生命週期而存在。
如果容器產生了非持久化狀態資料,可以考慮使用 tmpfs 掛載避免將資料永久儲存到任何位置,並且通過避免寫入容器的可寫層來提高容器的效能。
卷使用 rprivate 繫結傳播,並且繫結傳播對卷不可配置。
1. 選擇 -v
或 --mount
標誌
最初,-v
或 --volume
標誌用於獨立容器,而 --mount
標誌用於群集服務。但是,從 Docker 17.06 開始,也可以在獨立容器上使用 --mount
。一般來說,--mount
更明確和詳細。最大的不同在於 -v
語法將所有選項組合在一個欄位中,而 --mount
語法將它們分開。下面是每個標誌的語法比較。
知識點:初學者應該使用
--mount
語法。有經驗的使用者會更熟悉-v
和--volume
語法,但是仍然建議使用--mount
語法,因為調查顯示它更加易用。
如果需要指定卷驅動器選項,必須使用 --mount
。
-v
或--volume
標誌:由三個由冒號(:)分隔的欄位組成。這些欄位必須按照正確的順序排列,每個欄位的含義並不明顯。
- 對於命名卷,第一個欄位是卷的名稱,並且在給定主機上是唯一的。對於匿名卷,第一個欄位被省略。
- 第二個欄位是檔案或目錄在容器中的掛載路徑。
- 第三個欄位是可選的,並且是一個逗號分隔的選項列表,例如 ro。這些選項在下面討論。
--mount
標誌:由多個名值對組成,逗號分隔,每個鍵值由<key> = <value>
--mount
語法比-v
或--volume
更冗長,但鍵的順序並不重要,並且標誌的值更易於理解。
- 要掛載的型別
type
,可以是 bind、volume 或 tmpfs。本主題主要使用 volume。 - 要掛載的源
source
,對於有名字的卷,這裡是卷的名字。對於匿名卷忽略這個欄位。可以指定為src
或source
。 - 要掛載的目的地
destination
,將檔案或目錄掛載在容器中的路徑作為其值。 可能被指定為destination
、dst
或target
。 - 只讀選項
readonly
,這個選項會使得掛載到容器中的繫結掛載只讀。 - 選項
volume-opt
,可以被多次指定,由包含選項名和值的名值對組成。
- 要掛載的型別
下面的例子在可能的地方展示了 --mount
和 -v
語法。
1.1 --mount
和 -v
之間的表現差異
與繫結掛載不同,卷的所有選項都可用於 --mount
和 -v
標誌。
當在服務上使用卷時,僅支援 --mount
。
2. 建立和管理卷
與繫結掛載不同,可以通過 docker volume
命令在任何容器範圍之外建立和管理卷。
建立卷:
$ docker volume create my-vol
列出卷:
$ docker volume ls
local my-vol
檢查卷:
$ docker volume inspect my-vol
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
刪除卷:
$ docker volume rm my-vol
3. 啟動帶有卷的容器
啟動帶有卷的容器時,如果卷不存在,Docker 會自動建立這個卷。下面的例子將卷 myvol2
掛載到容器中的 /app/
。
下面的 --mount
和 -v
示例產生相同的結果。注意不能同時執行,除非在執行第一個例子之後刪除 devtest
容器和 myvol2
卷。
--mount
$ docker run -d \
--name devtest \
--mount source=myvol2,target=/app \
nginx:latest
-v
$ docker run -d \
--name devtest \
-v myvol2:/app \
nginx:latest
通過 docker inspect devtest
來驗證卷被正確的建立和掛載。檢視 Mounts 部分:
"Mounts": [
{
"Type": "volume",
"Name": "myvol2",
"Source": "/var/lib/docker/volumes/myvol2/_data",
"Destination": "/app",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
這顯示掛載的是一個卷,並顯示了正確的 source 和 destination,並且是讀寫模式。
停止容器並刪除卷:
$ docker container stop devtest
$ docker container rm devtest
$ docker volume rm myvol2
3.1 啟動帶有卷的服務
當啟動服務並定義卷時,每個服務容器都使用其自己的本地卷。如果使用本地卷驅動程式,則任何容器都不能共享此資料,但某些卷驅動程式確實支援共享儲存。 AWS 的 Docker 和 Azure 的 Docker 都使用 Cloudstor 外掛支援持久儲存。
下面的例子啟動了一個具有 4 個副本的 Nginx 服務,每個副本都使用一個名為 myvol2
的本地卷。
$ docker service create -d \
--replicas=4 \
--name devtest-service \
--mount source=myvol2,target=/app \
nginx:latest
通過 docker service ps devtest-service
來驗證服務正在執行:
$ docker service ps devtest-service
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
4d7oz1j85wwn devtest-service.1 nginx:latest moby Running Running 14 seconds ago
刪除服務,這會停止其所有任務:
$ docker service rm devtest-service
使用服務的語法差異
docker service create
命令不支援 -v
或 --volume
標誌。在掛載捲到服務中的容器時,必須使用 --mount
標誌。
3.2 使用容器填充卷
如果啟動一個建立新卷的容器(如上所述),並且在容器的要掛載的目錄中具有檔案或目錄(例如 /app/ above
),則將該目錄的內容會複製到卷中。容器然後掛載並使用該卷,而使用卷的其他容器也可以訪問預先填充的內容。
為了說明這一點,本示例啟動一個 Nginx 容器,並使用容器的 /usr/share/nginx/html
目錄(Nginx 儲存其預設 HTML 內容的地方)的內容填充新卷 nginx-vol
。
--mount
和 -v
示例的結果相同:
--mount
$ docker run -d \
--name=nginxtest \
--mount source=nginx-vol,destination=/usr/share/nginx/html \
nginx:latest
-v
$ docker run -d \
--name=nginxtest \
-v nginx-vol:/usr/share/nginx/html \
nginx:latest
在運行了這些示例中的一個之後,執行下面的命令來清除容器和卷。
$ docker container stop nginxtest
$ docker container rm nginxtest
$ docker volume rm nginx-vol
4. 使用只讀卷
對於某些開發的應用程式,容器需要寫入繫結掛載,以便將更改傳到 Docker 主機。在其他時候,容器只需要讀取資料。請記住,多個容器可以掛載相同的卷,並且可以同時對它們中的某些容器進行讀寫掛載,對其他容器進行只讀。
這個例子修改了上面的例子,但是通過在 --mount
列出的選項中新增 ro
將目錄掛載為只讀卷,如果存在多個選項,用逗號分隔。
--mount
和 -v
示例的結果相同:
--mount
$ docker run -d \
--name=nginxtest \
--mount source=nginx-vol,destination=/usr/share/nginx/html,readonly \
nginx:latest
-v
$ docker run -d \
--name=nginxtest \
-v nginx-vol:/usr/share/nginx/html:ro \
nginx:latest
通過 docker inspect nginxtest
來驗證繫結掛載建立正確。檢視 Mounts 部分:
"Mounts": [
{
"Type": "volume",
"Name": "nginx-vol",
"Source": "/var/lib/docker/volumes/nginx-vol/_data",
"Destination": "/usr/share/nginx/html",
"Driver": "local",
"Mode": "",
"RW": false,
"Propagation": ""
}
],
停止並刪除容器,刪除卷:
$ docker container stop nginxtest
$ docker container rm nginxtest
$ docker volume rm nginx-vol
5. 使用卷驅動程式
通過 docker volume create
命令建立卷時,或啟動一個包含尚未建立的卷的容器時,可以指定卷驅動程式。下面的例子使用 vieux/sshfs
卷驅動程式,第一次是建立獨立卷,第二次是啟動容器時建立新卷。
5.1 初始化設定
這個例子假設你有兩個節點,第一個節點是 Docker 主機並且可以通過 SSH 連線到第二個。
在 Docker 主機上,安裝 vieux/sshfs
外掛:
$ docker plugin install --grant-all-permissions vieux/sshfs
5.2 使用卷驅動程式建立卷
這個例子指定一個 SSH 密碼,但是如果兩個主機被配置為共享金鑰,則可以省略該密碼。每個卷驅動程式可能有零個或多個可配置選項,每個可選項都使用 -o
標誌指定。
$ docker volume create --driver vieux/sshfs \
-o sshcmd=test@node2:/home/test \
-o password=testpassword \
sshvolume
5.3 啟動會使用卷驅動程式建立卷的容器
這個例子指定一個 SSH 密碼,但是如果兩個主機被配置為共享金鑰,則可以省略該密碼。每個卷驅動程式可能有零個或多個可配置選項,每個可選項都使用 -o
標誌指定。如果卷驅動程式需要你傳輸選項,則必須使用 --mount
標誌來掛載卷,而不能使用 -v
。
$ docker run -d \
--name sshfs-container \
--volume-driver vieux/sshfs \
--mount src=sshvolume,target=/app,[email protected]:/home/test,volume-opt=password=testpassword \
nginx:latest
相關推薦
Docker 管理應用資料
原文地址 卷是持久化 Docker 容器產生和使用的資料的首選方式。繫結掛載依賴主機機器的目錄結構,而卷則完全由 Docker 管理。和繫結掛載相比,卷由幾個優勢: 卷比繫結掛載更容易備份和遷移。 可以通過 Docker CLI 或 Docker API
Docker管理應用資料
1. Manage data in Docker 預設情況下,所有在容器內部建立的檔案被儲存在一個可寫的容器層。這就意味著: 當容器不存在的時候,資料不能被持久化,而且在容器外部想要讀取這些資料十分困難。 容器的可寫的層與執行容器的主機密切相關。你不能輕易地移動資料。 要想把
docker管理應用程式資料、容器網路
管理應用程式資料 Docker提供三種方式將資料從宿主機掛載到容器中: • volumes:Docker管理宿主機檔案系統的一部分(/var/lib/docker/volumes)。儲存資料的最佳方式。 • bind mounts:將宿主機上的任意位置的檔案或者目錄掛載到容器中。 • tmp
Docker之應用資料管理(volume/bind mount/tmpfs)
雖然我們可以在docker容器中儲存寫入的資料,但還是有這樣幾個不足: 容器中的資料會隨著容器的停止執行而消失, 而且當其他的程序需要這些資料時,很難將這些資料從容器中提取出來;容器的資料寫入層是緊密地對應著他的宿主作業系統的,資料不能容易的被遷移到其他地方;要將資料寫
docker管理應用程序數據、容器網絡
網絡模式 開發環境 訪問 cal -m -h comm bbc sco 管理應用程序數據 Docker提供三種方式將數據從宿主機掛載到容器中: ? volumes:Docker管理宿主機文件系統的一部分(/var/lib/docker/volumes)。保存數據的最佳方式
swarm管理應用資料
將宿主機資料掛載到容器 以資料卷形式掛載資料: Volume 建立容器和資料卷 docker service create --mount type=volume,src=nginx_vol,dst=/usr/share/nginx/html -
Docker 基礎知識 - 使用卷(volume)管理應用程式資料
卷(volumes)是 Docker 容器生產和使用持久化資料的首選機制。[繫結掛載(bind mounts)](https://docs.docker.com/storage/bind-mounts/)依賴於主機的目錄結構,卷(volumes)完全由 Docker 管理。卷與繫結掛載相比有幾個優勢: -
Docker 基礎知識 - 使用繫結掛載(bind mounts)管理應用程式資料
繫結掛載(bind mounts)在 Docker 的早期就已經出現了。與卷相比,繫結掛載的功能有限。當您使用繫結掛載時,主機上的檔案或目錄將掛載到容器中。檔案或目錄由其在主機上的完整或相對路徑引用。相反地,當您使用卷時,在主機上 Docker 的儲存目錄中建立一個新目錄,Docker 管理該目錄的內容。
Docker 基礎知識 - 使用 tmpfs 掛載(tmpfs mounts)管理應用程式資料
[卷(volumes)](https://ittranslator.cn/backend/docker/2020/07/04/docker-storage-volumes.html) 和 [繫結掛載(bind mounts)](https://ittranslator.cn/backend/docker/20
05: iSCSI技術應用 資料庫服務基礎 管理表資料 總結和答疑
Top NSD ENGINEER DAY05 案例1:釋出iSCSI網路磁碟 案例2:訪問iSCSI網路磁碟 案例3:搭建mariadb資料庫系統 案例4:配置一個數據庫 案例5:使用資料庫查詢 1 案例1:釋出iSCSI網路磁碟 1.1 問題
Android 專案實戰:應用管理器Ⅰ(資料)
瞭解應用管理器的專案概況和功能需求 (從資料開始做) 掌握PackageManager的用法 掌握PackageInfo的常用屬性 掌握Application的常用屬性和方法 學會實體類的編寫(工具類) 完成專案的建立和資料測試 &nb
Docker容器和資料視覺化管理工具Flocker
Flocker 可輕鬆實現 Docker 容器及其資料的管理。這是一個數據卷管理器和多主機的 Docker 叢集管理工具,你可以通過它來控制資料。可用來在 Docker 中執行你的資料庫、查詢和 K/V 儲存,並在應用中輕鬆使用這些服務。 Flocker 同時也提供了 API 和命令列工具來進行功能的操
Docker:Docker思想&解決問題&Docker優勢&Docker基本概念&Docker安裝&基本設定&常用命令&網路管理&資料卷&構建自定義映象&多容器管理
什麼是Docker? Docker是一個用來裝應用的容器,就好比杯子用來裝水,筆筒用來裝筆,書包用來裝書一樣,你可以把hello world放到Docker裡,你可以把網站放到Docker裡,你可以把你想的到的任何程式放到Docker裡。 Docker的思想
第六篇 : Docker 容器的資料管理
一、容器的資料卷 1. 什麼是資料卷? docker的理念之一就是將應用和執行的環境打包,因此docker容器的生存週期通常都是與在容器中執行的程式相同的,而我們對資料的要求是持久化,docker容器之間也需要一個共享資料的渠道。這些需求就催生了docker資料卷的誕生。 doc
docker2-docker儲存持久化|資料管理
按照 Docker 最佳實踐的要求,容器不應該向其儲存層內寫入任何資料,容器儲存層要保持無狀態化。 檢視容器內應用產生的資料,或者需要把容器內的資料進行備份,甚至多個容器之間進行資料的共享,這必然涉及容器的資料管理操作。 所有的檔案寫入操作,都應該使用 資料卷(Volum
【Docker容器的資料管理】- 資料卷的使用
資料卷的使用-為資料卷新增訪問許可權 啟動一個容器新增只讀的資料卷 [email protected]:~# docker run -it -v~/datavolume:/data:ro--name dvt1 ubuntu /bin/bash 測試是否可
Docker之搭建2048遊戲,四種網路模式的學習,容器和管理,資料卷的管理,用Dockerfile建立映象
1.映象管理 物理機上: 軟體包: docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm [
HTML5+規範:Storage(管理應用本地資料儲存區)
Storage模組管理應用本地資料儲存區,用於應用資料的儲存和讀取。應用本地資料與localStorage、sessionStorage的區別在於資料有效域不同,前者可在應用內跨域操作,資料儲存
【Docker容器的資料管理】- 資料卷的使用-為容器新增資料卷
資料卷的使用-為容器新增資料卷 啟動容器並新增資料卷 [email protected]:~#docker run -it -v ~/datavolume:/data ubuntu /bin/bash [email protected]:/# ls
手機管理應用研究【3】—— 垃圾清理篇
dma 系統垃圾 存在 分析 獲得 /dev/ 進行 指定 相互 歡迎轉載。轉載請註明:http://blog.csdn.net/zhgxhuaa 說明 在總篇中提到過垃圾清理,本篇將著重介紹針對緩存、卸載殘留、無用數據等“靜態內容”的清理,有關於系統進程的清理以