Docker 基礎 : 數據管理

2022-01-01 Java知音

作者:sparkdev

連結:www.cnblogs.com/sparkdev

用戶在使用 Docker 的過程中,往往需要能查看容器內應用產生的數據,或者需要把容器內的數據進行備份,甚至多個容器之間進行數據的共享,這必然涉及容器的數據管理操作。容器中管理數據主要有兩種方式:數據卷(Data Volumes),數據卷容器(Data Volume Containers)。

數據卷

數據卷是一個可供容器使用的特殊目錄,它繞過文件系統,可以提供很多有用的特性:

數據卷可以在容器之間共享和重用。

對數據卷的更改會立即生效。

對數據卷的更新不會影響鏡像。

數據卷會一直存在,直到沒有容器使用。

數據卷的使用,類似於 linux 下對目錄或文件進行 mount 操作。

在容器內創建一個數據卷

在用 docker run 命令的時候,使用 -v 標記可以在容器內創建一個數據卷。多次使用 -v 標記可以創建多個數據卷。

下面的例子中我們使用 myimg/webapp 鏡像創建一個 web 容器,並創建一個數據卷掛載到容器的 /webdata 目錄。

$ sudo docker run -d -P –name web -v /webdata myimg/webapp python app.py

掛載一個主機目錄作為數據卷

使用 -v 標記也可以指定掛載一個本地的已有目錄到容器中去作為數據卷:

$ sudo docker run -d -P –name web -v /var/data:/opt/webdata myimg/webapp python app.py

上面的命令掛載主機的 /var/data 目錄到容器的 /opt/webdata 目錄。

這個功能在接下測試的時候特別方便,比如用戶可以放置一些程序或數據到本地目錄中,然後在容器中使用。另外,本地目錄的路徑必須是絕對路徑,如果目錄不存在,Docker 會自動創建。

Docker 掛載數據卷的默認權限是可讀寫(rw),用戶也可以通過 ro 標記指定為只讀:

$ sudo docker run -d -P –name web -v /var/data:/opt/webdata:ro myimg/webapp python app.py

加了 :ro 之後,容器內掛載的數據卷內的數據就變成只讀的了。

掛載一個本地主機文件作為數據卷

-v 標記也可以掛載一個主機中的文件到容器中作為數據卷,但是這樣做會帶來一些問題。建議還是掛載文件所在的目錄。

數據卷容器

如果用戶需要在容器之間共享一些持續更新的數據,最簡單的方式是使用數據卷容器。數據卷容器其實就是一個普通的容器,專門用它提供數據卷供其他容器掛載。下面簡單介紹其使用方法。

首先要創建一個數據卷容器 mydata,並在其中創建一個數據卷掛載到 /data 目錄。

$ sudo docker run -it -v /data –name mydata ubuntu

然後在其他容器中使用 --volumes-from 來掛載 mydata 容器中的數據卷。例如創建兩個容器 mycon1 和 mycon2,並從 mydata 容器掛載數據卷:

$ sudo docker run -it --volumes-from mydata –name mycon1 ubuntu
$ sudo docker run -it --volumes-from mydata –name mycon2 ubuntu

(注意,命令中沒有指定數據卷的信息,也就是說新容器中掛載數據卷的目錄和源容器中是一樣的。)

此時容器 mycon1 和 mycon2 都掛載同一個數據卷到相同的目錄 /data。三個容器任何一個在該目錄下寫入數據其他容器都能看到。

可以多次使用 --volumes-from 參數來從多個容器掛載多個數據卷。還可以從其他已經掛載了容器的容器來掛載數據卷。並且使用 --volumes-from 參數所掛載數據卷的容器自身並不需要保持在運行狀態。

但刪除掛載了數據卷的容器時,數據卷並不會被自動刪除。如果要刪除一個數據卷,必須在刪除最後一個還掛載著它的容器時顯式的使用 docker rm -v 命令來指定同時刪除關聯的容器。

使用數據卷容器可以讓用戶在容器之間自由的升級和移動數據卷,下面會進行詳細的介紹。

利用數據卷容器遷移數據

可以利用數據卷容器對其中的數據卷進行備份、恢復,以實現數據的遷移。

備份

使用下面的命令來備份 mydata 數據卷容器內的數據卷:

$ sudo docker run --volumes-from mydata -v $(pwd):/backup –name worker ubuntu tar cvf /backup/backup.tar /data

這個命令首先利用 Ubuntu 鏡像創建了一個容器 worker。又使用 --volumes-from mydata 參數來讓 worker 容器掛載 mydata 容器的數據卷。接下來使用 -v $(pwd):/backup 參數來掛載本地的當前目錄到 worker 容器的 /backup 目錄。

在 worker 容器啟動後,使用了 tar cvf /backup/backup.tar /data 命令來將 /data 下內容備份為容器內的 /backup/backup.tar,即宿主主機的當前目錄下的backup.tar。

恢復

如果要恢復數據到一個容器,可以按照下面的操作。首先創建一個帶有數據卷的容器 mydata2:

$ sudo docker run -v /data –name mydata2 ubuntu /bin/bash

然後創建另一個新的容器,掛載 mydata2 的數據卷,並使用 tar 解壓縮備份文件到所掛載的容器卷中:

$ sudo docker run --volumes-from mydata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

點擊圖片加入Java知音交流群

↓↓↓

看完本文有收穫?請轉發分享給更多人

相關焦點

  • Docker - 數據管理
    如:把 lxfubuntu1 容器中 /data 目錄下的 lxf.sh 文件,拷貝到宿主機 ~/lxf/ 目錄下docker cp lxfubuntu1:/data/lxf.sh ~/lxf/數據卷管理數據卷管理就是將容器的某個目錄,映射到宿主機,作為數據存儲同步的目錄命令
  • Docker數據卷管理和資源限制
    本文簡要介紹了Docker容器對數據卷管理以及CPU、內存和IO等系統資源限制方式1、Docker
  • ​Docker 數據卷的管理及自動構建docker鏡像
    /www.nmtui.com" >/data/index.html[root@docker01 ~]# curl 10.0.0.100http://www.nmtui.com設置共享卷,使用同一個卷啟動一個新的容器[root@docker01 ~]# docker run -d -p 8080:80 -v /data:/
  • Docker集群管理之Docker Compose
    前言:在上一篇《Docker集群管理之Docker Machine》中,我們通過源碼分析了解了Docker Machine的工作原理,使用者可以通過Docker Machine的一條命令在任意支持的平臺創建一個Docker主機,並能集中管理這些主機。Docker主機創建好之後,接下來就該考慮Docker容器部署的問題了。
  • docker技術篇-數據卷管理
    用戶在使用Docker的過程中,往往會涉及到數據的備份,容器間數據共享,在此我們介紹一下容器的數據管理操作。
  • 上手 Docker 容器數據管理
    在這一篇文章中,我們將帶你通過理論和實戰的方式掌握 Docker 的兩種常用的數據管理方式:數據卷(Volume)和綁定掛載(Bind Mount),從而能夠遊刃有餘地處理好數據,為你的應用提供強有力的支撐和保障。
  • Docker基礎篇(Dockerfile)-雲原生核心
    編寫Dockerfile文件)A --> D(2. docker build)A --> E(3. docker run)腳本文件的樣式,以centos為例在這裡插入圖片描述腳本文件內容FROM scratchADD centos-7-x86_64-docker.tar.xz /LABEL
  • Docker 數據持久化Volume
    為什麼需要Volume為了能夠持久化這些更改過的數據,並且能夠很容易實現容器間共享數據,Docker提出了Volume的概念。Volume是外部默認的聯合文件系統或者是存在於宿主文件系統中正常的文件或文件夾。
  • CoreOS實踐指南(七):Docker容器管理服務
    本文將主要介紹在具體的場景下,如何在CoreOS中恰當的管理Docker容器。至今在伺服器系統上流行的安裝軟體方式依然是編譯原始碼、手工的安裝包或各種包管理工具,雖然包管理工具的出現解決了應用軟體安裝、卸載以及自身依賴等諸多問題,卻無法很好的解決軟體之間的依賴衝突。而早在Docker誕生以前,「沙盒」的概念已經被普遍使用在Android、iOS等主流的手機系統中了。
  • Docker從入門到放棄-基礎篇
    引言 如果你認為學習docker是運維該做的,那你就錯了。作為一名研發工程師,學會基礎的docker使用,能大大提高平時的效率。 雖然docker已經出來將近8年,但是相信還是有很多人並不知道docker是什麼?為什麼這麼受歡迎?
  • 使用Docker客戶端管理容器:這些命令必須知道
    【IT168 編譯】有時候,容器管理對於不熟悉這種技術的IT人員來說可能有點「可怕」。筆者希望通過這篇文章向大家解釋我們能夠如何管理和執行一些涉及容器管理的任務,使這個主題更清晰。
  • Docker常用命令就該這麼學!
    Docker 使您能夠將應用程式與基礎架構分開,從而可以快速交付軟體。 藉助 Docker,您可以與管理應用程式相同的方式來管理基礎架構。通過利用 Docker 的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產環境中運行代碼之間的延遲。
  • 巧用Docker Volume:數據備份的新潮流!
    使用docker volume 作為資料庫數據備份的新方式。容器化的時代確實來了,有狀態的資料庫容器、無狀態的應用容器,在docker化的世界裡爭相鬥豔!你可以保留傳統的操作方式、運維模式,但請不要拒絕任何能提升生產力,解放雙手的終極信仰!
  • Docker基礎技術:DeviceMapper
    它在內核中支持邏輯卷管理的通用設備映射機制,它為實現用於存儲資源管理的塊設備驅動提供了一個高度模塊化的內核架構,它包含三個重要的對象概念,Mapped Device、Mapping Table、Target device。
  • 深入淺出Docker Volume
    Docker Volume就可以用來存儲你的數據。Docker Volume是容器root文件系統之外的一個目錄,可以將這個目錄mount到其它容器中,也可以用Volume去mount主機中的任何目錄到容器中。數據還可以被存儲在容器的boot volume之外。
  • Docker系列教程01-使用Docker鏡像
    今天先帶大家學習Docker鏡像相關的基礎知識。Docker鏡像簡介1、什麼是鏡像?下載nginx鏡像鏡像管理命令docker pull 語法docker pull 語法通常情況下, 描述一個鏡像需要包括「名稱+標籤「信息。
  • 攻擊和審計Docker容器01
    適用於基於Linux和Windows的應用程式,無論基礎架構如何,容器化軟體都將始終運行相同。容器將軟體與其環境隔離開來,並確保它可以統一工作,儘管開發和演示之間存在差異。</title>2、Docker管理學習一些命令更好的管理鏡像和容器2.1 Inspecting container or imagesdocker inspect: 獲取容器/
  • 雲計算核心技術Docker教程:Docker Machine 使用 - TechWeb
    Docker Machine 是一個工具,它允許你在虛擬宿主機上安裝Docker,並使用docker-machine命令管理這個宿主機,可以使用Docker Machine在本地的MAC或者windows box、公司網絡,數據中心或者AWS這樣的雲提供商上創建docker。
  • Docker 容器資源管理,你真的學會了嗎?
    要想了解容器的核心原理,甚至自己動手寫容器,不深入了解容器資源管理的相關的內容是絕對不行的。本文將以容器資源管理為主題,解決以下三個問題:哪些分配給容器的資源可被我們管理?容器實際使用了多少資源?如何對容器使用的資源進行管理?
  • docker常用命令詳解
    — docker [ps|inspect|top|attach|wait|export|port|rename|stat] 容器rootfs命令 — docker [commit|cp|diff] 鏡像倉庫 — docker [login|pull|push|search] 本地鏡像管理 —