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

[经验分享] Docker 使用方法总结之:容器的数据卷操作

[复制链接]

尚未签到

发表于 2015-10-13 11:17:23 | 显示全部楼层 |阅读模式
1、Docker 容器下数据卷的理解
  一个数据卷就是经过特殊设计的,在一个或多个容器中通过UFS文件系统提供的一些特性

  • 实现数据持久化或共享.
  • 数据卷可以在容器之间共享和重复利用
  • 可以对数据卷里的内容直接进行修改
  • 对镜像的更新不会改变数据卷的内容
  • 卷会一直持续到没有容器使用他们
1.1、添加一个数据卷
  可以使用带有 -v 参数的 docker run 命令给容器添加一个数据卷.
[iyunv@localhost ~]# docker run -ti -v /data centos /bin/bash
[iyunv@d16afd8618ee /]# df -hl
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           914M     0  914M   0% /dev
shm              64M     0   64M   0% /dev/shm
tmpfs           914M     0  914M   0% /run
tmpfs           914M     0  914M   0% /tmp
/dev/sda1        16G  5.3G  9.6G  36% /data
tmpfs           914M     0  914M   0% /run/secrets
tmpfs           914M     0  914M   0% /proc/kcore  在Dockefile中使用VOLUME指令来创建添加一个或多个数据卷
1.2、挂载宿主文件夹到数据卷
  使用-v参数也可以挂载宿主的文件夹到容器里
  [iyunv@localhost ~]# mkdir attach_vol
[iyunv@localhost ~]# docker run -ti -v /root/attach_vol:/data centos /bin/bash
[iyunv@34c6750751f9 /]# ls /data
[iyunv@34c6750751f9 /]# mkdir /data/test
[iyunv@34c6750751f9 /]#
  这样会把本地的 /root/attach_vol文件夹挂在容器/data目录
  宿主机上的文件夹必须是绝对路径,而且当文件夹不存在时会自动创建
  此功能在Dockerfile文件中无法使用
  默认情况下Docker以读写权限挂载数据卷,但是我们也可以以只读方式进行挂载
1docker run -d -p 0.0.0.0:44455:22 --name data1 -v /src/data:/opt/data:ro centos6-ssh  还是上面的那个命令,只是我们添加了一个ro选项来制定挂载时文件权限应该是只读的
1.3 挂载本地文件作为数据卷
通过下面的操作,Container 的操作记录将会被记录在
/root/attach_vol/historyfile中

[iyunv@localhost ~]# docker run -ti --rm -v /root/attach_vol/historyfile:/root/.bash_history centos /bin/bash
[iyunv@bdfad7e8331a /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[iyunv@bdfad7e8331a /]# ls  
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[iyunv@bdfad7e8331a /]# cd
[iyunv@bdfad7e8331a ~]# ls
[iyunv@bdfad7e8331a ~]# exit
exit1.4、创建和挂载一个数据卷容器
  如果一些数据需要在容器间共享最好的方式来创建一个数据卷容器,然后从数据卷容器中挂载数据
1\创建一个带有命名容器来共享数据
[
root@localhost
~]# docker run -it  -v /data --name data_provider centos

[
root@c75b032d0cad
/]# df -hl

Filesystem      Size  Used Avail Use% Mounted on

tmpfs           914M     0  914M   0% /tmp

/dev/sda1        16G  5.3G  9.6G  36% /data
tmpfs           914M     0  914M   0% /run/secrets

tmpfs           914M     0  914M   0% /proc/kcore

2\在创建两个容器,使用--volumes-from标记挂载/data卷

容器1:[iyunv@localhost ~]# docker run -it --volumes-from data_provider --name data_consumer1 centos
[iyunv@4b5c5cee494d /]# df -hl
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           914M     0  914M   0% /tmp
/dev/sda1        16G  5.3G  9.6G  36% /data
tmpfs           914M     0  914M   0% /run/secrets
tmpfs           914M     0  914M   0% /proc/kcore容器2:
[iyunv@localhost ~]# docker run -it --volumes-from data_provider --name data_consumer2 centos
[iyunv@0ded6c200f2b /]# df -hl
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           914M     0  914M   0% /tmp
/dev/sda1        16G  5.3G  9.6G  36% /data
tmpfs           914M     0  914M   0% /run/secrets
tmpfs           914M     0  914M   0% /proc/kcore
  可以使用多个 -–volumes-from 参数来把多个容器中的多个数据卷放到一起
  

1.4、备份,恢复数据
  备份
  使用它们来进行备份,恢复或迁移数据.如下所示,我们使用
  –volumes-from 标记来创建一个挂载了要备份数据卷的容器.
  [iyunv@localhost ~]# docker run  --volumes-from data_provider -v $(pwd):/backup  --name backup_worker2 centos
  [iyunv@367e610fe294 /]# tar -cvf /backup/backup.tar /data
  这里我们创建并登录了一个新容器,挂载了data_provider容器中的数据卷,并把本地的一个目录挂载了/backup下,最后再传一条tar命令来备份dbdata卷到/backup下,当命令执行完成后容器就会停止运行,并保留dbdata的备份,在本地目录下会一个备份的文件
  注:新创建的容器中要有tar命令,得到备份数据就可以恢复或迁移数据了
  

  恢复
  首先创建一个容器
  [iyunv@localhost ~]# docker run -it  -v /restore --name data_restore centos
[iyunv@74d2eb371a14 /]#
  

  再创建一个新的容器,该容器挂载data_restore容器,并将压缩文件解压缩到关在的容器卷中
  [iyunv@localhost ~]# docker run -it --rm  --volumes-from data_restore -v $(pwd):/restore centos tar -xvf backup.tar
  
1.5、删除数据容器
如果删除了挂载数据卷的容器,数据卷不会被自动删除.如果需要删除一个数据卷,必须在删除最后一个挂载该数据卷的容器时显示的使用docker -rm -v 命令来同时删除关联的容器

运维网声明 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-126219-1-1.html 上篇帖子: docker命令之login 下篇帖子: docker “FATA[0162] ... connection timed out" 错误改正方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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