Docker数据管理
1.什么是数据卷
就是将宿主机的某个目录,映射到容器中,作为数据存储的目录,我们就可以在宿主机对数据进行存储
数据卷(Data Volumes):容器内数据直接映射到本地主机环境
2.数据卷特性
1)数据卷可以在容器之间共享和重用,本地与容器间传递数据更高效;
2)对数据卷的修改会立马有效,容器内部与本地目录均可;
3)对数据卷的更新,不会影响镜像,对数据与应用进行了解耦操作;
4)卷会一直存在,直到没有容器使用。
3.数据卷与目录
Docker run -itd --name 【容器的名字】 -v 【宿主机目录】:【容器目录】 【依赖镜像】【命令可选】
docker run -itd --name tmp-nginx -v /home/itcast/tmp/:/tmp-text/ nginx
4.数据卷与文件(不推荐)
注意:
1、Docker挂载数据卷的默认读写权限(rw),用户可以通过ro设置为只读,格式:[宿主机文件]:[容器文件]:ro
2、如果直接挂载一个文件到容器,使用文件工具进行编辑,可能会造成文件的改变,从Docker1.1.0起,这会导致报错误信息。所以推荐的方式是直接挂在文件所在的目录。
Docker run -itd --name 【容器的名字】 -v 【宿主机文件】:【容器文件】 【依赖镜像】【命令可选】
docker run -itd --name tmp-txt -v /home/itcast/tmp/hello.go:/nihao/nihao.sh nginx
5.数据卷容器
5.1.创建一个数据卷容器
docker create -v 【容器数据卷目录】 --name 【容器名称】 【依赖的镜像名称 】【命令可选】
docker create -v /data-tmp --name v-tmp nginx
5.2.创建两个容器,同时挂载数据卷容器
docker run --volumes-from【数据卷容器的id或名字】-itd --name 【容器名字】【镜像名字】【参数可选】
docker run --volumes-from v-tmp -itd --name tmp01 nginx
docker run --volumes-from v-tmp -itd --name tmp02 nginx
6.Docker数据备份
流程:
1)创建一个挂在数据卷容器的容器
2)挂在宿主机本地目录作为备份数据卷
3)将数据卷容器的内容备份到宿主机本地目录挂载的数据卷中
4)完成备份操作后销毁刚刚创建的容器
docker run --rm --volumes-from [数据卷容器id/name] -v [宿主机目录]:[容器目录] [镜像名称] [备份命令]
docker run --rm --volumes-from v-tmp -v /home/itcast/backup/:/backup/ nginx tar -zcPf /backup/data.tar.gz /data-tmp
-P:使用原文件的原来属性(属性不会依据使用者而变),恢复字段到它们的原始方式,忽略现有的用户权限屏蔽位(umask)。 加了-p之后,tar进行解压后,生成的文件的权限,是直接取自tar包里面文件的权限(不会再使用该用户的umask值进行运算),那么不加-p参数,将还要再减去umask的值(位运算的减),但是如果使用root用户进行操作,加不加-p参数都一样。
7.Docker数据还原
流程:
1)创建一个新的数据卷容器(或删除原数据卷容器的内容)
2)创建一个新容器,挂载数据卷容器,同时挂载本地的备份目录作为数据卷
3)将要恢复的数据解压到容器中
4)完成还原操作后销毁刚创建的容器
docker run --rm -itd --volumes-from [数据要到恢复的容器] -v [宿主机备份目录]:[容器备份目录] [镜像名称] [解压命令]
docker run --rm --volumes-from v-tmp -v /home/itcast/backup/:/backup/ nginx tar xPf /backup/data.tar.gz -C /data-tmp