1. 程式人生 > >Docker 管理應用資料

Docker 管理應用資料

原文地址

卷是持久化 Docker 容器產生和使用的資料的首選方式。繫結掛載依賴主機機器的目錄結構,而卷則完全由 Docker 管理。和繫結掛載相比,卷由幾個優勢:

  • 卷比繫結掛載更容易備份和遷移。
  • 可以通過 Docker CLI 或 Docker API 管理卷。
  • 卷在 Linux 或 Windows 容器中都可以工作。
  • 在多個容器之間共享時,卷更安全。
  • 卷驅動程式允許你在遠端主機或雲端儲存卷,加密卷內容或增加其他功能。
  • 一個新卷的內容可以由容器預填充。

此外,和在容器的可寫層持久化資料相比,卷通常是更好的選擇,因為使用卷不會增加容器的體積,並且卷的內容脫離指定容器的生命週期而存在。

types-of-mounts-volume

如果容器產生了非持久化狀態資料,可以考慮使用 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,對於有名字的卷,這裡是卷的名字。對於匿名卷忽略這個欄位。可以指定為 srcsource
    • 要掛載的目的地 destination,將檔案或目錄掛載在容器中的路徑作為其值。 可能被指定為 destinationdsttarget
    • 只讀選項 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 說明 在總篇中提到過垃圾清理,本篇將著重介紹針對緩存、卸載殘留、無用數據等“靜態內容”的清理,有關於系統進程的清理以