购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 Docker的主要应用场景

Docker非常受市场欢迎,那么它有哪些应用场景呢?接下来我们一起了解一下Docker的主要应用场景。

2.2.1 简化配置,无须处理复杂的环境依赖关系

虚拟机的最大好处是能在硬件设施上运行各种配置不一样的应用。Docker在降低额外开销的情况下可以提供同样的功能,并且能让开发者将运行环境和配置(包括环境变量)放在代码(包括Dockerfile)中来执行部署。同一个Docker的配置可以在不同的环境中使用,大大降低了硬件要求和应用环境之间的耦合度。

简单地说,容器镜像打包完成后就是一个独立的个体了,丢到符合要求的地方就能直接跑起来,而无须针对各个系统、平台再去独立配置,以及安装各种运行时和环境,也无须处理复杂的环境依赖关系。

2.2.2 搭建轻量、私有的PaaS环境、标准化开发、测试和生产环境

对于大部分企业来说,搭建PaaS既没有那个精力,也没有那个必要。Docker占用资源非常小,一台服务器跑几十、上百个容器都绰绰有余。因此,Docker非常适合用于企业内部搭建轻量、私有的PaaS环境,并且不依赖于任何语言、框架或系统。

同时,Docker非常适用于标准化开发、测试、生产环境。我们可以搭建好一个标准的容器环境到各个部门,每个工程师都可以拥有自己单独的容器。

标准化开发、测试和生产环境之后:

·开发人员可以利用容器进行开发调试和开发测试,完成任务后仅需提交代码即可。

·测试人员不再需要与运维、开发人员进行配合,进行测试环境的搭建与部署,仅需拉取指定分支代码后利用容器进行测试,亦可通过代码流水线来完成自动化测试。在测试中,不但可以非常简单地同时运行多个版本的代码,而且可以随时“从头再来”——快速重置环境和数据。

·运维人员也仅需拉取指定分支的正式代码基于容器进行部署,无须再针对不同应用搭建不同的环境。当然,这一切也可以通过代码流水线来完成自动部署。

如图2-5所示,我们可以在一个虚拟机上运行多个不同系统和不同语言的容器。

图2-5

2.2.3 简化和标准化代码流水线,助力敏捷开发和DevOps实践

Docker镜像一次构建,即可到处运行,无须处理复杂的环境依赖关系,可以极大地简化整个代码流水线,并且可以标准化整个CI(持续集成)、CD(持续部署)流程,因此可以大大加速软件的开发进程,提高团队的敏捷性,保障产品持续快速交付。

一个简单、可供参考的基于Docker的代码流水线如图2-6所示。

图2-6

搬运箱子比搬运一堆没有打包的“杂碎”要简单省事得多,也便于堆放和管理。在后续的章节中,我们会详细地讲解如何使用Docker来加速产品开发以及助力DevOps实践。

2.2.4 隔离应用

很多情况下,我们需要在一台服务器上运行多个不同的应用,比如运行不同编程语言不同版本的多个应用。如果是部署在虚拟机,那么我们还需要考虑应用以及版本之间的兼容性,有时即使花费大量的精力也无法保障应用环境不起冲突。对于Docker来说,支持起来非常简单,利用其隔离功能即可:同一台机器,我们可以同时运行N个Docker应用,基于不同的运行时和版本(比如.NET Core、Java、Python的应用),托管到不同的Web服务器(Kestrel、Ngnix、Tomcat),而无须担心它们会搞起3Q大战(见图2-7),也往往无须担心开发、测试和生产机器会跑不起来。

图2-7

2.2.5 整合服务器资源

如同通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器,以降低成本。没有多个操作系统的内存占用,并能在多个实例之间共享没有使用的内存,因此Docker可以比虚拟机提供更好的服务器整合解决方案。

我们可以在服务器或云端创建或销毁资源,而无须担心重新启动带来的开销。通常情况下,服务器的资源利用率只有30%。使用Docker并进行有效的资源分配可以大大提高资源的利用率。这意味着资源可以得到更有效的利用——可以做更多衣服,而且没有边角料、成本更低。

2.2.6 现代应用

Docker非常适合于微服务架构、分布式架构和弹性架构,使用Docker会让架构师搭建现代架构时事半功倍!其适应性主要体现在以下几点:

·应用隔离优势。

·轻量和快,支持秒级启动、秒级伸缩。

·低成本优势。

·环境一致性。

·一次编译,到处运行。

2.2.7 调试能力

Docker提供了很多工具,不一定只是针对容器,却适用于容器。它们提供了很多功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,以帮助调试Bug。

2.2.8 快速部署

在虚拟机之前,引入新的硬件资源需要消耗几天的时间。虚拟化(Virtualization)技术将这个时间缩短到了分钟级别。Docker为进程创建一个容器,而无须启动一个操作系统,再次将这个过程缩短到了秒级。

Docker除了支持秒级启动之外,部署时镜像的拉取还支持差异化更新,不仅能够减少镜像的拉取时间(节约部署时间),还可以降低更新部署时的流量使用。

2.2.9 混合云应用、跨环境应用、可移植应用

通过容器来交付的应用可以在任何基础设施之上灵活迁移,同时这些基础设施又可以提供不同层次的应用管理方式,当业务在多个服务供应商之中寻求混合云或全云模式时,还可以完美地避免被平台捆绑。因此,Docker在混合云应用、跨环境应用、可移植应用中大有可为。

2.2.10 物联网和边缘计算

1.什么是物联网

物联网(Internet of Things,IoT)是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。顾名思义,物联网就是物物相连的互联网。这有两层意思:其一,物联网的核心和基础仍然是互联网,是在互联网基础上延伸和扩展的网络;其二,其用户端延伸和扩展到物品与物品之间进行信息交换和通信,也就是物物相连。物联网通过智能感知、识别技术与普适计算等通信感知技术,广泛应用于网络的融合中,也因此被称为继计算机、互联网之后世界信息产业发展的第三次浪潮。物联网是互联网的应用拓展,与其说是网络,不如说是业务和应用。因此,应用创新是物联网发展的核心,以用户体验为核心的创新2.0是物联网发展的灵魂。

2.Docker和物联网

物联网正在快速发展,是智慧设备(包括环境传感器、健康跟踪器、家用电器和工业设备等)的高度互联网络。开发人员正在快速为IoT创建应用程序,而使用容器可在很多方面带来帮助。首先,容器是一种轻量型的虚拟化解决方案,开发人员可使用容器快速、大规模地开发、测试、部署和更新IoT应用程序,尤其是可以大大加速自动化测试、持续集成和移动应用程序的交付。其次,Docker可以帮助开发人员轻松、快速地构建容器并将它们部署在任何地方(一次构建,到处运行):私有和公有云中、本地VM中(包括IoT设备在内的物理硬件上)。因此,只要IoT设备上可运行Linux,我们就能够将容器直接部署到相关设备上。尽管这些IoT设备上通常仅有有限的系统资源,但部署Docker容器是可行的(因为它们的运行时开销几乎为0),甚至可在设备上运行多个容器(例如,并排运行应用程序的不同版本来进行比较)。

目前,支持Linux的IoT设备越来越多,比如流行的树莓派、香蕉派、LattePanda。

另外,物联网设备往往运行不太可靠,比如经常因为省电需要而进行休眠,或者使用低带宽或者偶尔联网,因此应用更新一直是一个难题。在这块,Docker给出了一个可行的解决方案——设备通过无线连接获取镜像差异,而不是整个镜像。基于差异的更新的完成速度快得多,这会减少连接设备所需的时间量、降低故障概率,进而减轻低带宽网络上的压力。这使更频繁地应用更新成为可能。

3.边缘计算

这里顺便提一下边缘计算。随着物联网设备的大爆发,必然会产生大量的数据,以及随之而来的数据处理和数据安全等需求,而这些已经无法通过传统云计算的集中式处理方式来满足(比如带宽、实时性、隐私以及能耗等),于是就产生了边缘计算。边缘计算的核心目的就是拉近云端和物联网终端的距离,降低网络延迟,提供新的服务。在2018年,两大著名的备受瞩目的开源组织Linux基金会和Eclipse基金会共同努力将已经在超大规模云计算环境中普遍使用的Kubernetes(简称k8s,一个容器编排平台)带入到物联网边缘计算场景中,试图利用开源平台k8s的优势,发挥其在边缘计算领域的应用潜能。K8s物联网边缘工作组将会把容器的理念带到边缘计算,并促进k8s在边缘环境中的适用性。

总之,要满足对物联网应用程序的预计需求,开发人员将需要采用一些工具和实践,以便能够快速开发IoT应用程序和服务在智慧设备、移动设备、穿戴设备和云中运行。Docker容器能够将应用程序传送到任何地方运行,拥有极低的运行时开销,而且拥有一个能够实现轻量型可移植镜像和快速构建镜像的分层文件系统,是面向IoT开发人员的一个绝佳工具,并能提供优秀的整体解决方案。 9zdoYeWhHOBoyc8ZqHeDfhkE5M/NyNRcopusmqXtPfZGlfG6kByWmwjiK1dTAJeY

点击中间区域
呼出菜单
上一章
目录
下一章
×