Docker數據卷之數據持久化與備份-Volume Container

簡介

在使用docker 運行容器的時候,我們通常會保存一些靜態文件是數據,如網站的靜態文件、應用的配置文件等,這些數據需要持久化的存儲,否則會影響我們正在運行的應用或站點頁面,爲了提高數據的持久化安全性,我們可以利用Docker 不會刪除被其他容器使用和掛載的數據卷以及其中的數據,因此,通過創建數據卷容器在容器間存儲與共享文件數據。

數據卷容器在其他容器與數據卷之間起到一個的作用,因此,數據卷容器並不需要保證其必須運行。

一、數據卷容器

1. 數據卷容器在容器與數據卷之間的關係,如下所示

在這裏插入圖片描述

2. 創建數據卷容器

創建數據卷容器時,需要使用 -v 參數來建立數據卷容器所使用的數據卷。

[root@localhost ~]# docker create --name data -v /html nginx

注:

  1. 使用數據卷容器時無須保證數據卷容器處於運行狀態;同時不運行數據卷容器,可以減少對宿主機性能的影響。
  2. 同一個數據卷容器中,可以使用多個數據卷,不過爲了更爲準確的管理數據卷,建議使用不同的數據卷容器來關聯不同的數據卷,或者對數據捲進行分類存放於不同的數據卷容器中。

3. 連接數據卷容器

通過 --volumes-from 參數掛載數據卷容器關聯的數據卷。數據卷的掛載點,會使用創建數據卷容器時指定的數據卷掛載目錄。

[root@localhost ~]# docker run -t -d -p 80:80 --volumes-from data --name webser nginx

注:

  1. 多個容器同時使用了相同的數據卷容器所提供的數據卷時,它們所掛載目錄中的文件是相同的。
  2. 在任意一個容器中對掛載目錄中的文件進行操作,都會影響其他掛載的容器中掛載文件。
  3. 利用掛載相同數據卷容器所提供的數據卷,可以實現多個容器間對相同文件的即時訪問和操作,進而達到容器間共享文件數據的目的。
  4. 需要注意,在對數據卷容器提供的數據卷操作時(刪除),需要謹慎,操作結果會影響所有使用的容器。

二、數據卷容器備份(數據卷的遷移)

1. 數據卷的導出(備份)

數據的備份或導出是保證數據安全最簡單的方式,因此在對Docekr 使用過程中自然也就離不開對數據卷的導出或備份工作。

因爲數據卷導出或備份,並不是通過Docker 自身提供的方法實現,而是利用Tar 存檔管理工具來實現。而需要導出的數據卷又不是直接與宿主機目錄形式掛載,因此,要讓數據卷的數據被tar命令訪問到,必須要先進入容器中,在容器中通過tar 命令將數據卷目錄歸檔,然後將歸檔文件保存到容器外,因此,我們需要額外掛載一個容器外的目錄,用來存放歸檔好的數據。

我們利用數據卷容器的數據卷可以被多個容器共享使用(掛載),因此我們可以通過新創建容器掛載宿主機目錄,用於導出共享數據卷需要導出的數據,這樣就很容易的實現數據的導出或備份,具體過程如下圖所示:
在這裏插入圖片描述

1.1 創建新的容器(橋樑)

用於連接到持有需要導出數據卷的數據卷容器,容器創建和運行後,就可以進入容器執行打包命令,將導出數據放到掛載了宿主機目錄的位置。

[root@localhost ~]# docker run -it --volumes-from date -v $(pwd):/bakup --name export --rm nginx bash

1.2 進入容器對需要導出的數據進行歸檔

[root@localhost bakup]# docker run -it --volumes-from date -v $(pwd):/bakup --name export --rm nginx bash
root@43ca716c1f4f:/# tar -cvf /bakup/data.tar /html/
tar: Removing leading `/' from member names
/html/
/html/test/
/html/1.txt
/html/2.txt
/html/3.txt
/html/4.txt
/html/5.txt
/html/6.txt
/html/7.txt
/html/8.txt
/html/9.txt
root@43ca716c1f4f:/# exit

或是直接將tar 命令作爲運行時的命令:

[root@localhost bakup]# docker run -it --volumes-from date -v $(pwd):/bakup --name export --rm nginx tar -cf /bakup/data.tar /html/

注 : --rm 參數:容器停止後自動刪除。

2. 數據卷的導入(恢復)

數據導入(恢復導出的數據),其實只要把導出的過程逆向執行一遍即可。

2.1 創建一個新的容器(橋樑)

新創建的容器,掛載上宿主機中存放導出數據的目錄,並連接到包含共享數據卷的數據卷容器上。

[root@localhost bakup]# docker run -it --volumes-from date -v $(pwd):/bakup --name importer --rm nginx bash

2.2 運行並進入容器,並在容器中對需要恢復的數據進行解包,把導出的數據恢復到目標數據卷指定的位置。

root@5b897788f3a3:/# cd /bakup/
root@5b897788f3a3:/bakup# ls
data.tar  html
root@5b897788f3a3:/bakup# tar xf data.tar -C /
root@5b897788f3a3:/bakup# ls /html/
1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt  html  test
root@5b897788f3a3:/bakup# exit

Docker 數據卷的備份與恢復的過程如上,歡迎相互討論與交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章