一、Docker容器的数据卷
什么是数据卷
数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。
数据卷设计的目的,在于数据的永久化,它完全独立与容器的生存周期,因此,Docker不会再容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理。
数据卷(Data Volume)的特点
数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。
数据卷可以在容器之间共享和重用
可以对数据卷的中的内容直接进行修改
数据卷的变化不会影响镜像的更新
卷会一直存在,即使挂载数据卷的容器已经被删除
为容器添加数据卷
sudo docker run -v ~/container_data:/data -it ubuntu /bin/bash
实例:
docker run -it -v ~/datavolume:/data ubuntu /bin/bash
ls -l
touch /data/c1
echo "I'm in container" > /data/c1
exit
ls -l
ls -l datavolume
vim datavolume/c1
docker ps -l
查看数据卷
docker inspect container
为数据卷添加访问权限
sudo docker run -v ~/datavolume:/data:ro --name dvt1 ubuntu /bin/bash
ls -l
只读文件,不能写入
touch data/c2
ls data
vi data/c1
exit
docker inspect dvt1
数据卷的使用
使用Dockerfile构建包含数据卷的镜像
dockerfile指令:
VOLUME["/data"]
实例
dockerfile文件
FROM ubuntu
VOLUME ["/datavolume1", "datavolume2"]
CMD /bin/bash
cd dockerfile/dvt
vim Dockerfile
docker build -t shuoyu/dvt .
docker run --name dvt3 -it shuoyu/dvt
ls
exit
docker inspect dvt3
Dockerflle中创建的数据卷,宿主机会自动创建地址,每次启动容器都会产生新的映射地址。
docker run --name dvt4 -it shuoyu/dvt
exit
docker inspect dvt4
二、Docker的数据卷容器
什么是数据卷容器
命名的容器挂载数据卷,其他的容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫数据卷容器。
挂载数据卷容器的方法
docker run --volumes-from [CONTAINER NAME]
实例:
docker run -it --name dvt4 shuoyu/dvt
ls
touch /datavolume1/dvt4_1
ls /datavolume1
exit
docker run -it --name dvt5 --volumes-from dvt4 ubuntu /bin/bash
ls
ls /datavolume1
touch /datavolume1/dvt5_1
ls /datavolume1
exit
docker run -it --name dvt6 --volumes-from dvt4 ubuntu /bin/bash
ls
ls /datavolume1
docker inspect --format="{{.volumes}}" dvt5
docker rm dvt4
docker restart
docker restart dvt5
docker attach dvt5
ls
touch datavolume1/dvt5_2
ls datavolume1
exit
三、Docker数据卷的备份和还原
数据备份
docker run --volumes-from [container name] -v ${pwd}:/backup ubuntu tar cvf /backup/backup.tar [container data volume]
实例:
docker restart dvt5
docker attach dvt5
ls
ls /datavolume1
exit
docker run --volumes-from dvt5 -v ~/backup:/backup --name dvt10 ubuntu tar cvf /backup/dvt5.tar /datavolume1
ls backup
说明:启动新容器执行备份命令,--volumes-from dvt5指定要备份的容器的名字,-v ~/backup:/backup指定备份文件的存放目录(前面是宿主机,后面是容器中),tar cvf /backup/dvt5.tar /datavolume1执行备份的操作。
数据还原
docker run --volumes-from [container name] -v ${pwd}:/backup ubuntu tar xvf /backup/backup.tar [container data volume]