任务实施

1.Docker

Docker是由PaaS提供商dotCloud开发的,起初是为了方便创建和管理Linux上的容器而开发的一款工具。之后dotCloud将公司名称更改为Docker,然后开始向全世界推广Docker和容器技术,后来这项技术也被命名为Docker。

Docker是管理Linux容器的工具,所以运行在Linux上,但也可以运行在Windows系统上。Docker引擎隶属于Moby开源项目,是Moby开源项目中的一部分。

技术人员在谈论Docker时,通常指的是Docker引擎。Docker引擎是一个基础设施工具,它的作用是运行和编排容器,企业采用的 Docker 技术指的就是围绕 Docker 引擎开发的产品。在Docker官方网站可以下载Docker引擎,Docker引擎如图1-9所示,引擎支持Linux系统、Windows系统和Mac系统(macOS)。

Docker引擎有着详细的划分方式,有3种部署平台,分别是云端、桌面和服务器。云端引擎有两个,都是社区版本,分别可以运行在AWS和Azure平台上,不过云端的引擎只支持Linux,不支持其他操作系统。云端Docker引擎如图1-10所示。

图1-9 Docker引擎

图1-10 云端Docker引擎

桌面类型的Docker引擎只支持Windows系统和Mac系统。Windows版和Mac版的Docker引擎有一个细小的差异,在于处理器的类型,Mac版的引擎支持ARM和Intel x86两种类型的处理器,Windows版的则只支持Intel x86处理器,这个细小的差别主要跟苹果计算机使用的处理器有关。桌面Docker引擎如图1-11所示。

服务器类型的Docker引擎支持4种操作系统,如图1-12所示,分别是Fedora、CentOS、Ubuntu和Debian。这些系统都是Linux系统,Docker引擎根据这些Linux系统都做了差异化的适配,以适配不同的Linux操作系统。

Docker引擎部署支持多种操作系统和处理器类型,用户可以根据自己的操作系统类型、处理器类型选择不同平台的引擎安装部署,也可以直接在云端尝试使用Docker引擎。

图1-11 桌面Docker引擎

图1-12 服务器类型的Docker引擎支持4种操作系统

Docker 引擎下载选项右侧的容器下载页面如图 1-13 所示,在这个页面里,用户可以下载Docker 官方提供的镜像文件和开发者发布的镜像文件。截至 2021 年 5 月 24 日,Docker 总共有7371845个官方和开发者提供的镜像,镜像提供者如图1-14所示。

图1-13 容器下载

图1-14 镜像提供者

镜像下载根据实际需要可以限定镜像的提供方、镜像的类型、镜像的操作系统和镜像的处理器。镜像类别过滤如图1-15所示。

Docker开源项目在2017年更名为Moby,Moby项目Logo如图1-16所示。Moby项目托管在GitHub上,作为一个开源的项目,任何人都可以为项目做出贡献,其中包括红帽、微软、IBM等大公司,也不乏小公司和个人开发者。

图1-15 镜像类别过滤

图1-16 Moby项目Logo

2.Kubernetes

Kubernetes,简称 k8s,是谷歌公司的开源项目,用于管理容器化的工作负载和服务。Kubernetes的一大特点在于它可以自主地管理容器,比如开发者想让某一种服务保持持续运行的状态,这时候 Kubernetes 就可以完成人工监管的工作,帮助开发者持续监控服务,保证服务能够持续运转。

应用部署的发展有3个阶段,分别是传统部署阶段、虚拟化部署阶段和容器部署阶段。传统部署阶段如图1-17所示,应用程序部署在物理服务器之上,导致资源分配的问题突出。如果多个应用程序运行在服务器上,当一个应用程序占用了过多的资源,就会导致其他应用程序得不到资源而性能下降。因此,其中一种解决方案是一个应用程序对应一套服务器和操作系统,应用程序单独占用资源,如图1-18所示。不过这种解决方案可能会导致资源利用率不足,而且当应用程序过多的时候,维护成本也会随之提高。

图1-17 传统部署阶段

图1-18 应用程序单独占用资源

虚拟化技术的出现让应用程序的部署进入虚拟化部署阶段。虚拟化部署阶段如图1-19所示,解决了硬件资源利用率的问题,通过虚拟化技术把一台物理服务器虚拟成多个虚拟的服务器,即在一个中央处理器(Central Processing Unit,CPU)上运行多个虚拟机。虚拟化技术在更好地利用服务器资源的基础上,还可以在物理硬件允许的条件下自由、有弹性地添加新应用程序。虚拟化技术的另一个好处在于可以隔离不同的虚拟机,运行在不同虚拟机上的应用程序产生的信息不会被另一台虚拟机的应用程序获取,在安全性上有不错的表现。

图1-19 虚拟化部署阶段

虚拟机就是虚拟出一台服务器,其所有的内容都跟物理服务器相似,是一台完整的计算机,有自己的操作系统,也可以在虚拟机上部署多个应用程序,在资源的配置调度上,虚拟机比物理机灵活许多。

随着PaaS的发展,出现了容器技术,容器技术给应用部署提供了新的选择。容器化部署阶段如图1-20所示。容器跟虚拟机相似,容器之间也有隔离,但是容器化跟虚拟机之间的差异在于,每一台虚拟机都有自己的操作系统,而所有的容器是共享同一个操作系统的,容器的轻量级由此而来。容器所具有的文件系统、内存、CPU等都和虚拟机相同。

图1-20 容器化部署阶段

容器云具有许多优势,如应用程序与基础架构的分离、跨云和操作系统的可移植性、资源隔离和高效的资源利用等。

Kubernetes 提供服务发现和负载均衡、存储编排、自动部署和回滚、自动完成装箱计算、自我修复和密钥与配置管理这五大功能。Kubernetes通过 DNS名称或者 IP地址公开容器,实现服务发现,如果识别到进入容器的流量过大时,Kubernetes 就会启用负载均衡,分配网络流量。Kubernetes 的存储编排可以帮助用户自动挂载存储系统。自动部署和回滚功能支持自动化部署新容器,可以灵活地对资源进行调控。自动完成装箱计算指的是用户指定了每个容器需要的CPU和内存,Kubernetes 会自动做出最优解来管理容器资源。Kubernetes 会重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器以实现自我修复,并且在准备好服务之前不会通报给客户端。Kubernetes可以在不重建容器镜像的情况下部署和更新密钥与应用程序的配置,且支持存储和管理敏感信息,如密码、ssh密钥等,无须在堆栈中暴露密钥。