声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:http://blog.csdn.net/halcyonbaby
内容系本人学习、研究和总结,如有雷同,实属荣幸!
目前docker不支持动态挂卷。
有同事就提出,以下方法是否可行:
1. 将块设备通过ln链接到容器与host的映射目录。
2. 将块设备挂载到容器与host的映射目录。
以下是实验过程:
由于非特权无法看到/dev下的设备,因此ln链接实际是无效的。 同理,对于其他块设备,也是这样的。
当然,我们可以配置privileged,则可以看到这些设备。但是privileged本身存在很大的安全隐患。
code> [root@localhost ~]# docker run --rm -t -i -v /home/test:/home/test centos:latest bash [root@a9248ec5062d /]# ls /home/test/ [root@localhost ~]# ln -s /dev/loop1 /home/test/loop1 [root@localhost ~]# ls /home/test/loop1 -l lrwxrwxrwx. 1 root root 10 Jan 23 03:33 /home/test/loop1 -> /dev/loop1 [root@a9248ec5062d /]# ls /home/test/ -l total 0 lrwxrwxrwx. 1 root root 10 Jan 23 08:33 loop1 -> /dev/loop1
可以看到这种方法也是不行的。原因是容器的目录系统与host是隔离的。
因此即使映射到了容器中,在host中继续对映射目录镜像挂载操作,也不会影响容器内部。
[root@localhost ~]# docker run --rm -t -i -v /home/test:/home/test centos:latest bash
[root@0ff2335e41d6 /]# ls /home/test/
a.txt
[root@localhost home]# touch /home/test/a.txt
[root@localhost home]# mount /dev/loop10 /home/test
[root@localhost home]# ls /home/test/
lost+found
[root@0ff2335e41d6 /]# ls /home/test/
a.txt
[root@localhost home]# umount /home/test/
[root@localhost home]# ls /home/test
a.txt
那么有没有办法可以实现类似的目的呢。这篇blog(http://dockerone.com/article/149)给出了解决办法。
据说docker正在开发类似的特性,希望能release吧。
那么docker希望我们如何完成容器内数据的管理呢?有一篇用户文档(http://docs.dockers.com/userguide/dockervolumes/)进行了讲解。简单来说,通过数据卷或者数据卷容器进行管理。
数据卷是特别设计的目录,绕过了容器的Union File System,向容器提供持久化数据和共享数据的能力。
$ docker run -t -i -v /test centos:latest bash
$ docker run -t -i -v /home/test:/home/test centos:latest bash
$ docker run -t -i -v /home/test/data.txt:/home/test/data.txt centos:latest bash
$ docker run -d -v /data/ --name dbdata centos:latest bash
$ docker run -d --volume-from dbdata --name app centos:latest app
$ docker run --volumes-from dbdata -v $(pwd):/backup busybox tar xvf /backup/backup.tar
参考:
1. docs.docker.com/userguide/dockervolumes 2. dockerone.com/article/149
原文地址:http://blog.csdn.net/halcyonbaby/article/details/43498755