Docker(linux container) 所依赖的底层技术
1. Namespace
用来做PID的隔离,有了namespace,在docker container里头看来,就是一个完整的linux的世界。在host看来,container里的进程,就是一个普通的host进程,namespace提供这种pid的映射和隔离效果,host承载着container,就好比造物者创造一个个世外桃源。
2. Cgroups
cgroup用于内存,cpu和io速率的隔离。
3. Chroot
如何在container里头,看到的文件系统,就是一个完整的linux系统,有/etc、/lib 等,通过chroot实现。
4. Veth
container里,执行ifconfig可以看到eth0的网卡,如何通信呢?其实是在host上虚拟了一张网卡出来(veth73f7),跟container里的网卡做了桥接,所有从container出来的流量都要过host的虚拟网卡,进container的流量也是如此。
5. Union FS
对于这种叠加的文件系统,有一个很好的实现是AUFS,在Ubuntu比较新的发行版里都是自带的,这个可以做到以文件为粒度的copy-on-write,为海量的container的瞬间启动,提供了技术支持,也会持续部署提供了帮助。不过以文件为粒度的copy-on-write带来一个问题,就是修改大文件时候,需要复制整个大文件进行修改,效率堪忧。
6. Iptables, netfilter
主要用来做ip数据包的过滤,比如可以做container之间无法通信,container可以无法访问host的网络,但是可以通过host的网卡访问外网等这样的网络策略。
7. TC
主要用来做流量隔离,带宽的限制。
8. Quota
用来做磁盘读写大小的限制,区别于cgroups对blkio的控制,quota是用来限制用户可用空间的大小。
9. Setrlimit
可以限制container中打开的进程数,限制打开的文件个数等。
本文详细介绍了Docker所依赖的九项关键技术:Namespace用于进程ID的隔离;Cgroups实现资源限制;Chroot创建独立文件系统;Veth实现网络虚拟化;UnionFS支持文件系统的增量更新;Iptables和Netfilter实现网络策略;TC控制网络流量;Quota限制磁盘使用;Setrlimit设置进程限制。

被折叠的 条评论
为什么被折叠?



