docker数据管理
1.数据卷管理
数据卷的作用是将宿主机的某个磁盘目录映射到容器的某个目录,从而实现宿主机与容器之间的数据共享
docker run(create --name 容器名称) -v 宿主机目录:容器目录 镜像名称
2.多个容器之间数据共享管理
多个容器之间的数据共享就需要用到数据卷容器,数据卷容器也是一个容器,但是他与其他docker容器不一样,他是专门用来提供数据卷给其他容器进行挂载操作
2.1创建数据卷容器
docker create --name my_datas -v /datas eureka:1.0 #使用eureka:1.0镜像容器,并命名为my_datas,同时在容器中创建/datas目录,/datas目录是共享目录
2.2创建docker容器并使用数据卷容器
命令格式:通过--volumes-from 参数设定从哪个数据卷容器创建新的容器,必须通过数据卷容器来创建docker容器,否则无法共享
docker run --volumes-from [数据卷容器名或者ID ][options][镜像名称或者ID]
具体如下(以2.1创建的数据卷容器为例):
docker run --volumes-from my_datas -d --name test1 -p 8001:8761 eureka:1.0 #创建容器test1
docker run --volumes-from my_datas -d --name test2 -p 8002:8761 eureka:1.0 #创建容器test2
2.3测试数据共享
上面2.2已经创建并启动了两个docker容器,分别为test1和test2,分别进入两个容器里面
访问test1容器并在共享目录中写入数据
docker exec -it test1 /bin/bash
cd /datas
echo "abc">>a.txt
访问test2容器并读取共享目录中的数据
此时进入到容器test2中会发现/datas目录下也有a.txt文件
docker exec -it test2 /bin/bash
cd /datas
ls -l
至此,两个容器就实现了数据共享
3.数据备份
3.1.docker cp复制备份
docker cp 96f7f14e99ab:/www /tmp/ #将容器96f7f14e99ab的/www目录拷贝到宿主机的/tmp目录中进行数据备份
docker cp /tmp/ 96f7f14e99ab:/www #将宿主机/tmp/目录拷贝到容器96f7f14e99ab中,目录重命名为www
3.2.使用一个临时容器作为中间过程辅助完成:此时备份的目录必须是创建数据卷容器时指定的挂载目录
命令格式:
docker run --rm --volumes-from [数据卷容器名称或ID] -v [宿主机目录]:[容器目录] [镜像名称] [备份命令]
其中--rm是自动删除容器参数,表示此容器执行完备份命令后,自动删除
docker run --rm -d -e MYSQL_ROOT_PASSWORD=ROOT -p 3306:3306 --name tmp --volumes-from my_datas -v /opt/datas:/tmp/datas mysql:5.7 tar -czf /tmp/datas/backup.tar.gz /datas
#my_datas为数据卷容器名称,有了数据卷容器就有了共享文件夹/datas,/tmp/datas表示当前容器的文件夹,/opt/datas表示宿主机文件夹
#tar -czf /tmp/datas/backup.tar.gz /datas 表示将共享文件夹/datas压缩到容器/tmp/datas/backup.tar.gz目录下,在/tmp/datas目录下的数据都在宿主机的/opt/datas目录下,所以进入到宿主机的/opt/datas/目录下就能看到压缩好的backup.tar.gz文件
4.通过临时容器还原数据
命令格式:
docker run --rm --volumes-from [数据要恢复到的容器] -v [宿主机备份目录]:[容器备份目录] [镜像名称] [解压命令]
docker run --rm -d --volumes-from my_datas -e MYSQL_ROOT_PASSWORD=ROOT --name tmp -v /opt/datas:/tmp/datas mysql:5.7 tar -xf /tmp/datas/backup.tar.gz -C /
#tar -xf:解压命令
#-C /:把数据解压到my_datas中根目录