Couchbase开发人员倡导副总裁Arun Gupta在JavaOne2016上进行了容器化演讲,介绍了Docker和Kubernetes的各个方面,以指导他的听众关于容器化如何工作。 这是一门关于如何,什么以及为什么使用容器的速成课程,对于希望围绕这种趋势思考的开发人员来说,这是一个很好的起点。 Gupta的详细示例进一步向旁观者展示了为企业使用可用工具的简单方法。
根据Gupta的说法 ,Docker围绕着当前流行的许多趋势和功能进行了包装。 “ Docker公司本身的一切都属于构建,交付和运行的范畴。 分布式应用程序,可伸缩性,云,服务发现,微服务-所有这些都是其中的一部分。” 就其本身而言,容器化似乎只是处理虚拟化的另一种方式。 但是,容器启用和放大开发人员感兴趣的功能的能力导致容器的普及度激增。 容器和微服务的协同作用是两个技术如何结合在一起以帮助拆分整体的一个很好的例子。
评估容器的影响
Gupta以他自己的MacBook为例,说明了如何使用容器来减少脂肪并使系统更轻巧。 Mac笔记本电脑只能容纳三到四个虚拟机。 典型的设置包括基础结构层,主机操作系统,管理程序,来宾操作系统,bin / lib,最后是在顶部运行的应用程序。 相比之下,容器化设置将仅具有基础结构,操作系统,Docker引擎,垃圾箱/库和应用程序。 剥夺了如此多的虚拟机绒毛,可以将像Ubuntu 16.x这样的平台从960mb简化为一个只有123mb的微型Docker映像。
Docker和云
在生产环境中使用适用于AWS或Azure的 Docker怎么样? Docker已经提供了集成工具来采用开发环境并将其无缝迁移到任何流行的云基础架构中。 当然,重要的是不要精简到愚蠢的程度。 “在构建分布式应用程序时,只有一个主机意味着一个故障点,这是一个基本缺陷。 这是在分布式体系结构中应避免的第一条基本规则。”
借助CloudFormation模板,可以轻松地在整个AWS云中扩展环境,以确保建立健壮和有弹性的模型。 要在多主机环境中运行,可以选择一个四节点的Docker集群,并运行具有自动缩放,ELB和EBS的多容器应用程序。 简而言之,两端的提供商都可以轻松地将容器化趋势带入云中。
使用Kubernetes编排Docker
正如Gupta解释的那样, Kubernetes是一个用于Docker容器的开源编排系统 。 它为“所需状态”提供了声明性原语。 尽管Docker现在具有类似的功能(称为Docker Swarm),但Kubernetes是原始功能,仍然是Arun使用的编排工具。 它自以为是的框架旨在使容器化系统能够自我修复和自动重启,并支持跨主机的复制和调度。
Kubernetes中的基本构建块称为Pod。 容器是一组并置的容器,它们共享IP,名称空间和存储卷。 古普塔(Gupta)坦言,起初很难缠住头,因为豆荚是短暂的。 关键不是要始终运行完全相同的Pod,而是要在任何给定时间都运行所需数量的Pod。
在一个典型的部署中,“您有一个映像,它被包装在一个容器中,该容器被包装在一个可以向上和向下缩放的复制控制器中,而这些则是在服务的前端。 所有这些都是以非常松散的耦合方式完成的。 每个吊舱都有特定的标签,服务正在寻找这些标签。” 有一个学习曲线,但是找到一个绕过Kubernetes的方式是有好处的。 “这是很多层次,很多意见。 但是,一旦您掌握了这个概念,这个概念就可以奏效了。” Gupta通过分解每个组件并展示与Wildfly一起使用的容器化来结束他的演讲。 观众可以在Arun的演讲“面向Java开发人员的Docker”中看到所有详细信息。