Docker实战(二)数据卷管理
Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。
数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。
一、数据卷创建
容器管理实验中我们学习的命令 docker run 用来创建容器,可以在使用改命令时添加 -v 参数,就可以创建并挂载一个到多个数据卷到当前运行的容器中,-v的作用是将宿主机的一个目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共享一个目录,如果本地路径不存在,Docker也会自动创建。
# 创建两个目录 mkdir /tmp/data1 /tmp/data2 # 分别将两个目录挂载到新创建的容器上 docker run -t -i --name docker2 -v /tmp/data1:/data1 -v /tmp/data2:/data2 ubuntu /bin/bash
上述命令中 -v 参数可以使用多次,并挂在多个数据卷到容器中。后面的参数信息中冒号前面是宿主机的本地目录,冒号后面是容器中的挂载目录。
使用 docker inspect docker2 查看docker2容器中的数据卷信息:
进入容器后我们可以查看和使用容器卷,尝试向这个容器卷中写入数据,然后在宿主机中查看是否存在,此处操作就不作演示了。
二、数据卷权限
挂载的数据卷默认为可读写权限,除非外部文件系统做了特殊限制,在 docker run的时候也可以执行为只读权限:
# 创建一个数据卷目录 mkdir /tmp/rodata # 以只读的方式挂载到docker2ro容器上 docker run -t -i --name docker2ro -v /tmp/rodata:/rodata:ro ubuntu /bin/bash
上面的命令中参数很简单,ro表示 readonly,挂载后的数据卷就是只读权限了,这时候我们再次尝试向数据卷中写入:
三、挂载主机上的文件
除了可以挂载目录之外,文件也可以作为数据卷挂载到容器中。
# 创建测试文件 echo 'test docker file' > /root/dockerfile.txt # 创建容器并挂载测试文件 docker run -t -i --name docker2file -v /root/dockerfile.txt:/root/dockerfile.txt:ro ubuntu /bin/bash
四、数据卷容器
如果需要在多个容器间共享数据,并希望永久保存这些数据,最好的方式是使用数据卷容器,类似于一个提供网络文件共享服务的NFS服务器。
数据卷容器创建方法跟普通容器一样,只需要指定宿主机的一个文件夹作为数据卷即可,使用docker create命令创建但不启动数据卷容器:
docker create -v /data --name docker2db ubuntu /bin/true
其他使用该数据卷容器的容器创建时候需要使用--volumes-from参数,指定该容器名称或ID:
docker run --volumes-from docker2db ...
创建site1和site2两个容器挂载数据卷容器docker2db,可以连接到这两个容器中对数据卷进行操作,并查看彼此之间是否已经有了共享文件:
五、备份数据卷
继续使用之前环境,我们对数据卷容器中的数据进行备份,备份方法:
1. 创建一个新的容器
2. 挂载数据卷容器
3. 挂载宿主机本地目录作为数据卷
4. 将数据卷容器的内容备份到宿主机本地目录挂载的数据卷中
5. 完成备份操作后容器销毁
按照上述步骤对数据卷容器docker2db中的数据进行备份:
# 创建备份目录 mkdir /tmp/backup # 创建备份容器 docker run --rm --volumes-from docker2db -v /tmp/backup:/backup ubuntu tar cvf /backup/docker2db.tar /data
PS:本Docker实战教程系列中使用的操作系统是基于Debian的LMDE2,教程中的命令均已运行测试,如有雷同,我抄你的!!!
除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址
老哥问你个问题,我用docker搭建了一个nginx,我把静态资源放在容器里面,我把容器commit成镜像再推送到我的云仓库上面,然后我在别的地方pull这个镜像的时候以前存在容器的静态资源都没有了,这是为什么啊,请问怎么才能实现我前面这个想法呢
本来想自己实验后给你回复的,但这段时间太忙没时间搭建环境试验,我以前也有你相同的想法只是没有行动。看你是评论在数据卷管理这里,我想是不是你在这个容器中使用了数据卷呢?我觉得要实现这个想法,是不能使用数据卷的(且最好不要和其它容器有关联),因为如果使用数据卷的话,静态资源就存储到了数据卷容器中了。
是,就是你抄的我的,哈哈哈!!!
欢迎稀有物种程序媛光临!!!
没有亵渎您劳动成果的意思,只是觉得这句话特别好玩,您写的内容特别棒,对我们帮助很大,辛苦了
哈哈哈,知道你是开玩笑的,不过文章内容确实也如同最后一句所声明的,都是网络上参考各种不同资料然后重新实验整理,所以是抄谁的都有可能!!!