目录docker
在容器技术介绍篇,咱们提到过容器的难点在构建网络和文件存储。容器的文件系统虽然能够保存数据,可是容器中的,容器自己是不可迁移的,只能导出其中的文件系统,可是导出文件系统不是迁移容器的最佳实践,最佳实践是镜像。可是镜像是静态数据。改变容器文件系统的东西是不会影响到镜像的。因此就有了挂在volume实践。在build应用镜像的时候,就经过VOLUME给容器建立挂载点,能够挂在宿主机的卷或者其它容器的卷。至此,咱们知道了为何要有volume,由于要持久化容器产生的数据。那本文将说明docker volume是什么,怎么使用挂载,容器间共享同步,迁移备份还原数据。ubuntu
docker volume是docker容器对应使用的外界存储。bash
要实现这个,不是经过每一个容器都挂载相同的物理数据券来实现,而是经过第一个容器挂载数据券后。后面的容器在docker run时,指定一个--volumes-from 第一个dockerid,这样新建的容器就会同第一个容器同样,有相同挂载点对应数据卷。咱们一般称第一个容器是“数据卷容器”网络
应用产生的数据是很是重要的,数据持久化到数据卷后,持久化数据的备份和迁移还原也是数据卷使用的重要操做。性能
备份volume
备份一个容器的volume,经过启动一个新容器,共享要备份的目标容器,在新容器新挂在备份的目录在新容器的另外一个挂载点;因为新容器同时共享了目标容器的volume,因此在新容器中执行tar 共享挂载点数据 放到新挂载点,同时启动新容器时指定--rm,这样就能够在新容器的新挂载点对应的数据卷中找到备份的数据了。
命令以下:已经知道存在docker容器docker1 其有一个数据卷要备份时/data
docker run -it --volumes-from docker1 -v /tmp/backup/:/backup --name docker_bk --rm ubuntu tar cvf /backup/docker1.tar /data
执行成功的话,会炸/tmp/backup/下看到docker1.tar
这种方式是最专业和正确的操做。ui
还原volume
恢复基本原理同样,也是将新容器启动后,做为数据卷容器,而后再启动第二个容器,挂载备份数目录,并--volumes-from 第一个容器,执行tar xvf 数据到第一个容器的卷中。同步
docker run -it --name docker_recover -v test_vol:/data ubuntu /bin/bash
docker run --rm --volumes-from docker_recover -v /tmp/backup/:/backup ubuntu tar xvf /backup/docker1.tar -C /datadockerfile