1. 程式人生 > >自己學Docker:7.資料卷容器的備份、恢復

自己學Docker:7.資料卷容器的備份、恢復

最近由於工作的原因,各種事情,忙的要死.使用者發現軟體有問題,也不管是不是自己操作的問題,一口就咬定是軟體的問題,詢問什麼問題時就”有問題”三個字迴應也是醉了.
煩心事過去就不說,之前一直關於Docker看到了資料卷容器,就像知道資料卷容器有什麼用處.查了不少資料,最基本的用處還是利用資料卷容器來備份、恢復、遷移資料卷.

備份

我們先建立一個data容器.

sudo docker run -i -t -v /data --name data c9fc7f8eec37

這裡寫圖片描述
根據之前Docker的資料持久化之資料卷容器可知,上面建立的data資料卷容器掛載了data目錄.
為了驗證資料卷容器的備份功能,我在掛載的/data目錄下建立一個data檔案,並寫入內容”data”.
這裡寫圖片描述


然後為了利用資料卷容器備份,使用 –volumes-from 標記來建立一個載入 data 容器卷的容器,並從主機掛載當前目錄到容器的 /backup 目錄。

sudo docker run -i -t --volumes-from data -v $(pwd):/backup c9fc7f8eec37 tar cvf /backup/backup.tar /data

上面的程式碼就完成了這一步,$(pwd)是docker支援的指定當前目錄的方法,瞭解linux基本命令的會發現,linux檢視當前目錄就是pwd命令.
容器啟動後,在當前目錄下生成的backup.tar 檔案就是data容器卷的備份檔案.
這裡寫圖片描述


這樣,資料卷容器中的資料就備份完成.
簡言之就是,先建立一個容器,並掛載要備份的data容器資料卷,再掛載資料卷(pwd):/backup/bakcup/data/backup宿$(pwd):/backup目錄。

恢復

備份最終也是為了可以恢復,否則備份就沒有意義了.Docker恢復備份也很簡單,只需要2部即可.
首先,建立一個帶有空資料卷的容器 data1。

sudo docker run -itd -v /data --name data1 c9fc7f8eec37

這裡可以發現,run的引數使可以寫在一起的.之前瞭解到引數i是開啟容器中的stdin,t是為容器分配一個偽終端.這裡的d是後臺執行,並列印容器ID容器.
這裡寫圖片描述


可以發現,名利執行後列印了容器的id,通過ps檢視可知,容器一直在執行.
然後,建立另一個容器,掛載 data1容器卷中的資料卷,並使用 untar 解壓備份檔案到掛載的容器卷中。

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

這裡寫圖片描述
這個時候,之前備份的資料卷容器的資料已經恢復到了容器data1中了.為了檢視和驗證恢復的資料,我們可以再啟動一個容器掛載data1容器捲來檢視.
簡言之就是,如果要恢復資料到一個容器,首先建立一個帶有資料卷的容器 data1,然後建立另一個容器,掛載 dbdata1 的容器,並使用 tar 解壓備份檔案到掛載的容器卷中。