[docker]动态挂卷与数据卷管理,docker动态


声明:

本博客欢迎转发,但请保留原作者信息!

博客地址: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,向容器提供持久化数据和共享数据的能力。

  • 数据卷可以多个容器共享和重用
  • 数据卷独立于容器存在
  • 更新容器镜像,不影响数据卷
  • 数据卷的读写是直接的,绕过容器的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

相关内容