设为首页 收藏本站
查看: 2070|回复: 0

[经验分享] [docker] 管理docker容器中的数据

[复制链接]

尚未签到

发表于 2015-4-17 09:58:04 | 显示全部楼层 |阅读模式
  之前我们介绍了Docker的基本概念(前面的没翻译...),了解了如何使用Docker镜像进行工作,并且学习了网
络和容器之间的链接.这一节我们将讨论如何管理容器中及容器之间的数据.  
  我们将查看下面两种管理Docker中数据的主要方法.  


  • 数据卷
  • 数据卷容器
数据卷
  一个数据卷就是经过特殊设计的,在一个或多个容器中通过UFS文件系统提供的一些特性
实现数据持久化或共享.  


  • 数据卷可以在容器之间共享和重复利用
  • 可以对数据卷里的内容直接进行修改
  • 对镜像的更新不会改变数据卷的内容
  • 卷会一直持续到没有容器使用他们
添加一个数据卷
  你可以使用带有 -v 参数的 docker run 命令给容器添加一个数据卷.在一个 docker run
中可以多次使用 -v 参数来达到挂载多个数据卷的目的.我们现在在web应用容器中挂载
单个卷.
  $ sudo docker run -d -P --name web -v /webapp training/webapp python app.py

  这将会在容器中创建一个/webapp卷  
  提示: 你也可以在Dockerfile中使用VOLUME指令来给任何从那个镜像创建的容器添加
一个或多个新数据卷  
  
挂载宿主文件夹到数据卷
  另外,使用 -v 参数也可以挂载宿主的文件夹到容器里  
  
$ 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
  
  你可以使用上面的技术及你喜欢的工具进行自动数据备份,迁移和恢复.
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58031-1-1.html 上篇帖子: Docker,用任何工具链和任何语言来构建任何应用 下篇帖子: Docker学习总结之Docker与Vagrant之间的特点比较
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表