1. 程式人生 > >Docker之 資料備份與還原

Docker之 資料備份與還原

文章目錄

首先要了解資料卷,與資料容器的概念

1 資料卷

執行容器時 使用-v 引數可以掛載一個本地的目錄到容器中作為資料卷(共享資料夾)

#命令格式:
docker run -itd --name [容器名字] -v [宿主機目錄]:[容器目錄][映象名稱] [命令(可選)]
宿主機目錄需要絕對路徑

例:

本地建立資料夾tmp 並新增test.txt檔案

➜  docker ls tmp     
test.txt 

建立容器並掛載資料卷 tmp資料夾 ,檢視test1資料夾內容,並新增檔案

➜  docker docker run -itd --name ubu_test1 -v /Users/suibingyue/develop/docker/tmp/:/test1/ ubuntu
b279be03c93824488a1492648495dd579886847d6c8d582571ef6321721f9390
➜  docker docker exec -it ubu_test1 bash 
[email protected]:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test1  tmp  usr  var
# 檢視掛載的test1目錄
[email protected]:/# cd test1 [email protected]:/test1# ls test.txt # 新增資料 [email protected]:/test1# echo "hello from ubuntu_test1" > test2.txt [email protected]:/test1# ls test.txt test2.txt

3 在本地檢視容器修改後的檔案

[email protected]:/test1# exit
➜  docker ls tmp     
test.txt  test2.txt

2 資料卷容器

專門為其他容器提供資料互動儲存的容器

1、建立資料卷容器(資料卷容器自身並不需要啟動)

2、其他容器掛載資料卷容器

例:

1、建立資料卷容器

# 建立資料卷容器
➜  docker docker create -v /data --name ubu-data ubuntu
b1980c99fa50742ff5aa1228c43c20138419280f6605210d75a5c100c4cbc578

2、建立容器ubu-go、ubu-nginx

➜ docker docker run --volumes-from ubu-data -itd --name ubu-go ubuntu
4a28f943e6df71401b39c9c5bdc5f31933c4bb13b939bf27087ddcaed72c206f

➜  docker docker run --volumes-from ubu-data -itd --name ubu-nginx ubuntu
77a75120be7811c2ccc8855c75c4e4e7f91bcf52b9b1a0d919e2c4a6d3d812a1

3、進入容器1修改資料

#進入 ubu-go 修改資料
➜  docker docker exec -it ubu-go bash
[email protected]:/# cd data/
[email protected]:/data# ls
[email protected]:/data# echo 'hello from ubu-go'>1.txt
[email protected]:/data# exit 

4 進入容器2 檢視容器1增加的資料,並新增新資料

#進入 ubu-nginx 檢視容器ubu-go新增的資料 並新增資料2
➜  docker docker exec -it ubu-nginx bash 
[email protected]:/# cd data/
[email protected]:/data# ls
1.txt 
[email protected]:/data# cat 1.txt 
hello from ubu-go
# 增加新資料
[email protected]:/data# echo 'hello from ubu-nginx'>2.txt
[email protected]:/data# exit

5 再次進入容器1 檢視容器2 新增的資料

#再次進入ubu-go 檢視資料 可以看到ubu-nginx新增的資料
➜  docker docker exec -it ubu-go bash 
[email protected]:/# cd /data/
[email protected]:/data# ls
1.txt  2.txt
[email protected]:/data# cat 2.txt 
hello from ubu-nginx

3 Docker資料備份

資料的備份及還原原理同資料卷掛載,然後對資料進行操作。

#命令格式:
$ docker run --rm --volumes-from [資料卷容器id/name] -v [宿主機目錄]:[容器目錄][映象名稱] [備份命令]

流程:

本地建立備份資料夾backup

建立容器,掛載本地備份資料夾到資料容器/backup(備份完刪除即可,可使用 --rm引數)

使用tar命令,備份資料到/backup

例:(備份容器ubu-go)

1 本地建立本分資料夾

➜  docker ls
backup     tmp        ubuntu.img

2 建立容器,掛載本地backup目錄,建立後使用tar命令,備份/data資料

➜  docker docker run --rm --volumes-from ubu-go -v /Users/suibingyue/develop/docker/backup/:/backup/ ubuntu tar zcpf /backup/data.tar.gz /data
tar: Removing leading `/' from member names
➜  docker 

3 檢視備份到本地的檔案data.tar.gz

➜  docker ls backup 
data.tar.gz
➜  docker tar -xzvf backup/data.tar.gz 
x data/
x data/1.txt
x data/2.txt
➜  docker 

4 docker資料還原

以下模擬資料丟失過程 rm刪除檔案

➜  docker docker exec -it ubu-nginx bash
[email protected]:/# ls
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[email protected]:/# rm -rf data/*
[email protected]:/# ls data/
#資料丟失...

前提:已有本地backup備份資料

#命令格式:
docker run --rm -itd --volumes-from [資料要到恢復的容器] -v [宿主機備份目錄]:[容器備份目錄][映象名稱]  [解壓命令]

資料還原:掛載本地backup目錄,啟動後解壓縮到/data目錄下即可

➜  docker docker run --rm --volumes-from ubu-nginx -v ~/develop/docker/backup/:/backup/ ubuntu tar xpf /backup/data.tar.gz -C /
# 檢視還原後的資料
➜  docker docker exec -it ubu-nginx bash
[email protected]:/# ls data/
1.txt  2.txt
# 資料已還原