首先要了解数据卷,与数据容器的概念
运行容器时 使用-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
专门为其他容器提供数据交互存储的容器
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
数据的备份及还原原理同数据卷挂载,然后对数据进行操作。
#命令格式:
$ 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
以下模拟数据丢失过程 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
# 数据已还原