Docker之 資料備份與還原
阿新 • • 發佈:2019-01-09
文章目錄
首先要了解資料卷,與資料容器的概念
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
# 資料已還原