Docker背后的内核知识——Namespace资源隔离

本文从namespace使用的API开始,结合Docker逐步对六个namespace进行讲解。相信把讲解过程中所有的代码整合起来,你也能实现一个属于自己的“shell”容器了。虽然namespace技术使用起来非常简单,但是要真正把容器做到安全易用却并非易事。PID namespace中,我们要实现一个完善的init进程来维护好所有进程;network namespace中,我们还有复杂的路由表和iptables规则没有配置;user namespace中还有很多权限上的问题需要考虑等等。其中有些方面Docker已经做的很好,有些方面也才刚刚开始。希望通过本文,能为大家更好的理解Docker背后运行的原理提供帮助。

继续阅读

Docker源码分析(九):Docker镜像

Docker风暴席卷全球,并非偶然。如今的云计算时代下,轻量级容器技术与灵活的镜像技术相结合,似乎颠覆了以往的软件交付模式,为持续集成(Continuous Integration, CI)与持续交付(Continuous Delivery, CD)的发展带来了全新的契机。

理解Docker的“镜像”技术,有助于Docker爱好者更好的使用、创建以及交付Docker镜像。基于此,本文从Docker镜像的4个重要概念入手,介绍了Docker镜像中包含的内容,涉及到的技术,还有重要的特性。Docker引入优秀的“镜像”技术时,着实使容器的使用变得更为便利,也拓宽了Docker的使用范畴。然而,于此同时,我们也应该理性地看待镜像技术引入时,是否会带来其它的副作用。关于镜像技术的其它思考,《Docker源码分析系列》将在后续另文分析。

继续阅读

Docker源码分析(八):Docker Container网络(下)

如何使用Docker Container的网络,一直是工业界倍加关心的问题。本文将从Linux内核原理的角度阐述了什么是Docker Container,并对Docker Container 4种不同的网络模式进行了初步的介绍,最终贯穿Docker 架构中的多个模块,如Docker Client、Docker Daemon、execdriver以及libcontainer,深入分析Docker Container网络的实现步骤。

目前,若只谈论Docker,那么它还是只停留在单host宿主机的场景上。如何面对跨host的场景、如何实现分布式Docker Container的管理,目前为止还没有一个一劳永逸的解决方案。再者,一个解决方案的存在,总是会适应于一个应用场景。Docker这种容器技术的发展,大大改善了传统模式下使用诸如虚拟机等传统计算单位存在的多数弊端,却在网络方面使得自身的使用过程中存在瑕疵。希望本文是一个引子,介绍Docker Container网络,以及从源码的角度分析Docker Container网络之后,能有更多的爱好者思考Docker Container网络的前世今生,并为Docker乃至容器技术的发展做出贡献。

继续阅读