以前咱们介绍了Docker的基本概念(前面的没翻译...),了解了如何使用Docker镜像进行工做,而且学习了网
络和容器之间的连接.这一节咱们将讨论如何管理容器中及容器之间的数据.html咱们将查看下面两种管理Docker中数据的主要方法.python
一个数据卷就是通过特殊设计的,在一个或多个容器中经过UFS文件系统提供的一些特性
实现数据持久化或共享.linux
你可使用带有 -v 参数的 docker run 命令给容器添加一个数据卷.在一个 docker run
中能够屡次使用 -v 参数来达到挂载多个数据卷的目的.咱们如今在web应用容器中挂载
单个卷.web
$ sudo docker run -d -P --name web -v /webapp training/webapp python app.py
docker这将会在容器中建立一个/webapp卷ubuntu
提示: 你也能够在Dockerfile中使用VOLUME指令来给任何从那个镜像建立的容器添加
一个或多个新数据卷bash
另外,使用 -v 参数也能够挂载宿主的文件夹到容器里app
webapp
$ sudo docker -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py这样会把本地文件夹/src/webapp挂在到容器中的/opt/webapp目录.对于测试来讲这是
很是游泳的.例如咱们能够把源码挂载到容器中并经过修改源码查看应用运行状况.在
宿主机上的文件夹必须是绝对路径,并且当文件夹不存在时会自动建立.工具提示:出于可移植性和共享的木的挂载宿主文件的功能在Dockerfile中没法使用.就宿
文件而言,宿主依赖可能事容器没法在全部的主机上正常工做.默认状况下Docker以读写权限挂载数据卷,可是咱们也能够以只读方式进行挂载.
$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
这里咱们挂载了和上面相同的一个目录 /src/webapp.可是咱们添加了 ro 选项来制定
挂载时文件权限应该是只读的.
若是你有一些持久数据须要在容器之间共享或想要使用非持久性容器,最好的方式是创
建一个命名数据卷容器,而后从数据卷容器中挂载数据.咱们来建立一个带有卷的命名容器来共享数据.
$ sudo docker run -d -v /dbdata --name dbdata training/postgres你能够在另一个容器中使用 --volumes-from 标记来挂在/dbdata卷
$ sudo docker run -d --volumes-from dbdata --name db1 training/postgres而后是另一个容器同时也挂载/dbdata卷:
$ sudo docker run -d --volumes-from dbdata --name db2 training/postgres你可使用多个 --volumes-from 参数来把多个容器中的多个数据卷放到一块儿.
你也能够挂载经过挂载dbdata容器实现的容器db1和db2来扩展关系链
$ sudo docker run -d --name db3 --volumes-from db1 training/postgres
另一个有用的功能是使用它们来进行备份,恢复或迁移数据.以下所示,咱们使用
--volumes-from 标记来建立一个挂载了要备份数据卷的容器.
$ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata这里咱们建立并登陆了一个新容器,挂载了dbdata容器中的数据卷.并把一个本地目录挂
载到了/backup下.最后咱们传入了一条tar命令来备份dbdata卷到/backup下.当命令执
行完成后容器就会中止运行,并保留一个dbdata的备.而后你就能够恢复数据到同一个或者另外建立的容器中.建立一个新的容器:
$ sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash而后解压备份文件到新容器的数据卷中:
$ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar你可使用上面的技术及你喜欢的工具进行自动数据备份,迁移和恢复.