了解Docker和Kubernetes是如何改变应用程序开发的,以及这些关键的容器技术是如何结合在一起的。
如果你跟上了软件开发的最新趋势,你无疑会一次又一次地遇到两个术语:Docker和Kubernetes,它们本质上是容器和编排的简写。
Docker容器帮助并简化了通过开发和测试将应用程序迁移到生产环境中的过程,而Docker和Kubernetes都帮助重新发明了将应用程序构建和部署为微服务集合而不是单一堆栈的方式。 为什么Docker和Kubernetes很重要,它们是如何改变软件开发的,它们在这个过程中扮演什么角色?
Docker 和容器
Linux、Windows和其他现代操作系统中支持的容器允许软件在独立于系统其他部分的小型环境中运行。容器被比作VMS,但它们不是VMS,它们更精简,启动和停止更快,更灵活和便携。因为容器可以在几秒钟内上下旋转或伸缩,它们使得在云这样的弹性环境中运行应用程序更加容易。
Linux和其他操作系统多年来一直支持容器化应用程序,但使用容器并不完全是用户友好的。Docker,无论是开源的还是商业化的,都是一种软件,它使容器成为一种用户友好和开发者友好的商品。Docker为容器提供了一组通用的工具和隐喻,因此您可以将应用程序打包到容器映像中,以便在您自己的组织或其他地方轻松部署和重用。
简而言之,Docker使创建容器映像、对其进行版本控制、共享它们、移动它们并将它们作为运行容器部署到Docker兼容的主机上成为一个快照。
我什么时候用Docker 和容器?
Docker和containers最适合处理必须具有以下一个或多个特性的工作负载:
弹性伸缩性。你不知道一个应用程序需要运行多少实例才能满足需求。一个容器化的应用程序或服务可以通过部署更少或更多的容器实例来扩展以满足需求。 隔离。你不希望应用程序干扰其他应用程序。也许您将同时运行多个版本的应用程序,以满足不同版本的API。或者你想保持底层系统的干净(总是个好主意)。 可移植性。您需要在各种环境中运行此应用程序,并且要求每个设置都是可复制的。容器允许您打包应用程序的整个运行时环境,使应用程序易于部署到任何与Docker兼容的主机—开发人员桌面、QA测试机、本地iron或远程云。
Kubernetes和容器编排
容器的设计主要是为了使进程或应用程序与底层系统彼此隔离。创建和部署单个容器很容易。但是,如果您要将多个容器(例如数据库,Web前端,计算后端)组装到可以作为一个整体进行管理的大型应用程序中,而不必担心部署,连接,管理,并分别缩放每个容器?您需要一种将所有部分编排为功能整体的方法。
这就是Kubernetes要做的工作。如果Docker是邮轮上的乘客,那么Kubernetes就是邮轮主管。 Kubernetes基于Google创建的项目,提供了一种方法,可以跨多个主机自动进行多容器应用程序的部署和管理,而不必直接管理每个容器。开发人员描述了跨多个容器的应用程序布局,包括每个容器如何使用网络和存储的详细信息。 Kubernetes在运行时处理其余部分。它还处理诸如机密和应用程序配置之类的细微细节的管理。 Kubernetes需要一定的专业知识才能很好地使用,尽管它比过去更像是一个交钥匙解决方案。易用性方面的某些进步归因于常见应用的简便配方(Helm图表);部分原因是由知名品牌公司(Red Hat,Canonical,Docker)生产的大量Kubernetes发行版,这些发行版与流行的应用程序堆栈和开发框架紧密结合。
什么时候使用Kubernetes和容器编排?
服务少量用户的简单容器化应用通常不需要编排,更不用说Kubernetes了。但是,如果应用程序的功能水平不高或用户数量不多,则很难不重新发明编排系统所提供的功能。这是确定编排何时应用的一些经验。 您的应用程序很复杂。 任何涉及两个以上容器的应用程序都可以满足要求。也就是说,仅通过少量的解决方案(例如Docker群模式)而不是Kubernetes可以精心安排仅服务于少量用户的适度应用。
您的应用对伸缩性和弹性有很高的要求。 Kubernetes和其他协调器使您可以通过描述系统的期望状态,而不是手动编写对变化的条件的反应,来平衡负载并旋转容器以声明式地满足需求。
您想充分利用现代CI / CD技术。 编排系统支持使用蓝/绿部署或滚动升级的应用程序的部署模式。
也许会有一天,Docker和Kubernetes甚至会被更友好的抽象所取代,并让位于更优雅的方式来创建和管理容器。但是,到目前为止,Docker和Kubernetes还是重要的。