跟我一起學docker 六 資料管理

2021-09-11 14:47:06 字數 1829 閱讀 7232

1.資料卷

資料卷是乙個可供容器使用的特殊目錄,有如下特性:

資料卷可以在容器之間共享和重用

資料卷修改會立即生效

資料卷的更新不會影響映象

如果有容器使用資料卷,該捲會一直存在

準備工作:

建立乙個目錄,並在目錄裡面建立檔案,檔案內寫入內容。

在容器內建立資料卷

在使用docker run的命令時,使用 -v 標記可以在容器內建立乙個資料卷,並且可以指定掛在乙個本地已有的目錄到容器中作為資料卷:

通過目錄跟容器內建立了一層關係,資料卷發生變化後,容器內和容器外都會隨之發生改變。例如容器掛載乙個檔案,當容器掛了後,檔案不會丟失。

注意:預設掛載的資料卷的許可權是rw(可讀寫),如果要求ro(唯讀),則需要加上對應的ro引數,命令可改為:

下面我們一起來操作一下:

echo $ 命令標識當前目錄。

進入容器找到root目錄可檢視到已掛載的資料卷。

資料卷目錄與容器內目錄有對映關係,所以不管是在容器內部修改資料卷還是在外部修改資料卷,相對應的資料卷都會發生改變。

唯讀的演示

2.資料卷容器

資料卷容器用於使用者需要在容器間共享一些持續更新的資料,資料卷容器專門提供資料卷供其它容器掛載使用。

example:

建立資料卷容器db1

docker run -d --name db1 -v/dbdata -ti ubuntu bash

建立容器db2與db1共享dbdata的資料

docker run -d --name db2 --volumes-from db1 -ti ubuntu bash

在容器db1和容器db2任意乙個容器修改dbdata的內容,在兩個容器內均生效

資料卷容器的刪除:

如果刪除了掛載的容器,資料卷並不會被自動刪除,如果要刪除乙個資料卷,必須在刪除最後乙個還掛載它的容器時顯示使用docker rm -v 命令指定同時刪除關聯的容器。在下圖可看到即使刪除aatest,bbtest中仍然有filea檔案。

在aatest中建立了檔案filea,bbtest可以看到filea,刪除aatest容器後,filea在bbtest中還可以看到。

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

備份:使用下面的命令來備份dbdata資料卷容器內的資料卷:

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

說明:利用ubuntu映象建立乙個容器worker。使用--volumes-from dbdata引數來讓worker容器掛載dbdata的資料卷;使用$:/backup引數來掛載本地目錄到worker容器的/backup目錄。

worker啟動後,使用tar命令將/dbdata下的內容備份為容器內的/backup/backup.tar。

建立dbdata資料卷容器並寫入檔案:filea、fileb、filec

執行備份命令建立備份tar包:

恢復:如果恢復資料到乙個容器,可以參照下面的操作。首先建立乙個帶有資料卷的容器dbdata2:

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

然後建立另乙個新的容器,掛載dbdata2的容器,並使用tar命令解壓備份檔案到掛載的容器卷中即可:

docker run --volumes-from dbdata2 -v $:/backup ubuntu tar xvf /backup/backup.tar

跟我一起學攝影

咦 好巧!我也是攝影愛好者。咱們一起學習吧。或許你也有這樣的體驗,並茂的文章更能讓人快速進入學習狀態,更何況是攝影,必須有圖。下面是我彙總的資料,必須深入淺出,拒絕一切晦澀難懂。學習課本 1.佳能官網 能系統學習攝影知識,從入門 初級 中級 高階 高階。每個頁面講解乙個知識點,結合實際的拍攝效果,深...

跟我一起學python 跟我一起學人工智慧(一)

跟我一起學人工智慧 一 文 小步 系列第一講正式開課啦,課程全都是可以實操的乾貨,到後面ai演算法 python 可以結合做出乙個簡單的人工智慧應用 因本人也對ai領域涉足不久,如文章有不妥之處還請各位大神與我多多交流,此系列文章也屬於我學習ai過程中的總結,我也會做到盡量寫出只要是高中畢業就能看懂...

跟我一起學docker 七 網路

1 容器對外服務 當容器內執行一些網路應用,要讓外部訪問這些應用時,可以通過 p 或 p 引數來指定埠對映。使用 p 對映時,docker會隨機對映乙個49000 49900 的埠至容器內部開放的埠 docker run d p namemysql mysql 5.6 通過docker ps可以看到...