Docker-學習四(數據管理)

內容提要

利用數據卷對數據進行持久化,備份,恢復,及多個容器數據共享,實現數據的遷移等。
數據管理的兩種方式:

  • 數據卷(Data Volumes):容器內數據直接映射到本地主機環境;
  • 數據卷容器(Data Volume Containers):使用特定容器維護數據卷。

數據卷

數據卷是一個可供容器使用的特殊目錄,它將主機操作系統目錄直接映射進容器,類似於 Linux中的mount操作。(就是將一個設備(U盤/SD卡等)掛接到一個已存在的目錄上。訪問這個目錄就是訪問該存儲設備)。

  • 可以在容器之間共享和重用;
  • 對數據卷內數據的修改會馬上生效,無論是容器內操作的還是容器操作的;
  • 數據卷的操作不會影響鏡像,解耦應用和數據;
  • 卷會一直存在直到沒有容器使用纔可卸載。

1.容器內創建數據卷

啓動容器時使用-v標記在容器內創建數據卷,多次使用可以創建多個數據卷。
使用training/webapp 鏡像創建一個 web容器,並創建一個數據卷掛載到容器的/webapp 目錄:

docker run -d -P --name web -v /webapp  training/webapp python app.py

2.掛載主機目錄作爲數據卷(推薦)

使用-v參數也可以掛載本地已有的目錄到容器中作爲數據卷。

docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

加載主機的/ src/webapp 目錄到容器的/ opt/webapp 目錄,本地目錄的路徑必須是絕對路徑,如果目錄不存在Docker會自動創建。
Docker 掛載數據卷的默認權限是讀寫(rw),用戶也可以通過 ro 指定爲
只讀:

 docker run -d -P --name web -v /src/webapp:/opt/webapp:ro  training/webapp python app.py

3.掛載一個本地主機文件作爲數據卷(不推薦)

-v標記也可以從主機掛載單個文件到容器作爲數據卷

docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

數據卷容器

數據卷容器也是一個容器,它的目的是用來提供數據卷供其他容器掛載。

1.創建數據卷容器dbdata,並創建一個數據卷掛載到/dbadata

docker run -it -v /dbdata --name dbdata ubuntu

2.在其他容器中使用–volumes-from 來掛載 dbdata容器中的數據卷,例如創建db1和db2兩個容器,並從dbdata 容器掛載數據卷

docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu

容器 db1和db2 都掛載同一個數據捲到相同的/ dbdata 目錄。三個容器任何一方在該目錄下的寫入,其他容器都可以看到。
可以多次使用–volumes-from參數來從多個容器掛載多個數據卷。還可以從其他已經掛載了容器卷的容器來掛載數據卷。
注:

使用--volumes-from 參數所掛載數據卷的容器自身並不需要保持在運行狀
態。
如果刪除了掛載的容器,數據卷不會自動刪除。必須刪除最後一個掛載它的容器時顯式使用docker rm-v 來指定同時刪除關聯的容器。

利用數據卷容器來遷移數據

1.備份

使用下面命令備份dbdata數據卷容器內的數據卷

 docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar  cvf /backup/backup.tar /dbdata

首先利用 ubuntu 鏡像創建了一個容器worker。使用–volumes-from dbdata 參數來讓worker容器掛載dbdata容器的數據卷(即dbdata數據卷);使用-v$(pwd):/backup參數來掛載本地的當前目錄到worker容器的/backup 目錄。
worker 容器啓動後,使用了 tar cvf/backup/backup.tar/dbdata命令來將/dbdata下內容備份爲容器內的/backup/backup.tar,即宿主主機當前目錄下的backup.tar。

2.數據恢復

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

docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然後創建另一個新的容器,掛載dbdata2的容器,並解壓備份文件到所掛載的容器卷中

docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
發佈了62 篇原創文章 · 獲贊 0 · 訪問量 3110
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章