Docker之 数据备份与还原

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bondsui/article/details/86031504

首先要了解数据卷,与数据容器的概念

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 
root@b279be03c938:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test1  tmp  usr  var
# 查看挂载的test1目录
root@b279be03c938:/# cd test1
root@b279be03c938:/test1# ls
test.txt
# 新增数据
root@b279be03c938:/test1# echo "hello from ubuntu_test1" > test2.txt
root@b279be03c938:/test1# ls
test.txt  test2.txt

3 在本地查看容器修改后的文件

root@b279be03c938:/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
root@4a28f943e6df:/# cd data/
root@4a28f943e6df:/data# ls
root@4a28f943e6df:/data# echo 'hello from ubu-go'>1.txt
root@4a28f943e6df:/data# exit 

4 进入容器2 查看容器1增加的数据,并添加新数据

#进入 ubu-nginx 查看容器ubu-go添加的数据 并添加数据2
➜  docker docker exec -it ubu-nginx bash 
root@77a75120be78:/# cd data/
root@77a75120be78:/data# ls
1.txt 
root@77a75120be78:/data# cat 1.txt 
hello from ubu-go
# 增加新数据
root@77a75120be78:/data# echo 'hello from ubu-nginx'>2.txt
root@77a75120be78:/data# exit

5 再次进入容器1 查看容器2 添加的数据

#再次进入ubu-go 查看数据 可以看到ubu-nginx添加的数据
➜  docker docker exec -it ubu-go bash 
root@4a28f943e6df:/# cd /data/
root@4a28f943e6df:/data# ls
1.txt  2.txt
root@4a28f943e6df:/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
root@77a75120be78:/# ls
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@77a75120be78:/# rm -rf data/*
root@77a75120be78:/# 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
root@77a75120be78:/# ls data/
1.txt  2.txt
# 数据已还原

猜你喜欢

转载自blog.csdn.net/bondsui/article/details/86031504