用户在使用Docker的过程当中,每每须要能查看容器内应用产生的数据,或者须要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及到Docker的数据管理。node
容器中管理数据主要有两种方式:git
数据卷:github
数据卷是一个可供容器使用的特殊目录,他绕过文件系统,能够提供不少有用的特性:docker
数据卷的使用,相似于Linux下对目录或文件进行mount操做(挂载)。ubuntu
建立一个数据卷:bash
在使用docker run命令的时候,使用-v参数能够在容器内创造一个数据卷,若是屡次使用-v参数能够创造多个数据卷。spa
好比建立一个私有仓库的时候:.net
docker run –d –p 5000:5000 —name registry –v /tmp/registry registry
建立一个/tmp/registry数据卷挂载到这个容器里。seo
挂载一个主机目录做为数据卷:ip
使用-v参数也能够制定挂载一个本地已有的目录到容器中做为数据卷,仍是举建立私有仓库的例子:
docker run –d –p 5000:5000 —name registry –v /data/registry:/tmp/registry registry
这样即是把本地的/data/registry挂载到容器中做为/tmp/registry。不过本地目录必定要是绝对路径,若是,目录不存在Docker会自动建立。
另外,Docker挂在数据卷的默认权限是读写(rw),也能够使用(ro)指定为只读权限:
docker run –d –p 5000:5000 —name registry –v /data/registry:/tmp/registry:ro registry
这样容器就没有写入的权限了。
挂载一个主机文件做为数据卷:
也是能够把主机的一个文件挂载载到容器中做为数据卷,使用命令和挂载目录同样。
不过直接挂载一个文件到容器中,又在外部编辑文件有可能致使文件inode信息的改变,从Docker1.1.0起,这回致使错误信息。
因此建议挂载目录以达到访问文件的目的。
数据卷容器:
若是须要在容器之间共享一些持续的更新的数据,最简单的方式是使用数据卷容器。数据卷容器其实就是一个普通的容器,专门用它提供数据卷提供其余容器挂载。使用方法以下:
首先,建立一个数据卷容器好比dbdata,并在其中建立一个数据卷并挂载到/dbdata。
docker run –it –v /dbdata —name dbdata ubuntu
而后能够在其余容器使用–volumes-from来挂载dbdata容器中的数据卷。例如建立db1和db2两个容器,并从dadata容器挂载数据卷。
docker run –it —volumes–from dbdata —name db1 ubuntudocker run –it —volumes–from dbdata —name db2 ubuntu
完成后,db1和db2都挂载同一个数据卷到相同的/dbdata目录。三个容器任何一方在该目录下的写入,其余容器均可以看获得。
能够屡次使用–volumes-from从而从多个容器中得到多个数据卷,也能够从其余已经挂在容器卷的容器挂载数据卷。
使用–volumes-from参数所挂载的容器自身不须要保存在运行状态。
删除数据卷容器:
若是删除了挂载的容器好比删除了dbdata,db1,数据卷并不会被自动删除,由于此时还有一个db2正在使用这个数据卷容器。
若是想删除一个数据卷必须在删除最后一个还挂载着它的容器时显式使用docker rm-v命令来指定同时删除关联的容器。
利用数据卷容器迁移数据:
能够利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。
备份:
使用下面的命令来备份dbdata数据卷容器内的数据卷:
docker run —volumes–from dbdata –v $(pwd):/backup —name worker ubuntu tar cvf /backup/backup.tar/dbdata
很长,慢慢分析,首先是要创建一个利用ubuntu镜像容器,把本地当前路径挂载到容器的/backup下,容器执行的命令是tar cvf /backup/backup.tar /dbdata,命令达到的效果就是吧/dbdata压缩并保存到/backup下。
由于/backup是由本地当前路径挂载的,所以就是保存到当前路径下,从而实现备份的效果。
恢复:
若是要恢复数据到容器中,能够按照下面的操做。
首先建立一个带有数据卷的容器dbdata2:
docker run –v /dbdata —name dbdata2 ubuntu /bin/bash
而后建立另外一个新容器,挂载dbdata2容器,使用tar解压备份文件到所挂载的容器卷中便可:
docker run —volumes–from dbdata2 –v $(pwd):/backup ubuntu tar xvf /backup/backup.tar
容器是廉价的,数据是宝贵的,根据数据卷和本地的挂载以及容器之间容器卷的共享实现数据备份和还原很方便(说的好违心),总之,数据备份和恢复是没有问题了。
转自:梦续代码