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

任务1.1
认识Docker技术

任务要求

某公司因业务扩展,在应用的开发和部署过程中,存在着软件更新和发布低效、环境一致性难以保证、迁移成本太高等问题。为提高应用从开发到部署的效率,公司了解到Docker作为开源的应用容器引擎,在应用的持续集成方面有明显的优势,因此决定利用Docker容器技术来构建研发运维持续集成环境,于是安排工程师小王对Docker技术进行调研。

相关知识

1.1.1 Docker的发展历程

信息技术的飞速发展,促使人类进入云计算时代,云计算时代下孕育出众多的云计算平台。但众多的云平台之间标准规范不统一,每个云平台都有各自独立的资源管理策略、网络映射策略和内部依赖关系,导致各个平台无法做到相互兼容、相互连接。同时,应用的规模愈发庞大、逻辑愈发复杂,任何一款产品都无法顺利地从一个云平台迁移到另外一个云平台。

但Docker的出现,打破了这种局面。Docker利用容器技术弥合了各个云平台之间的差异,Docker通过容器来打包应用、解耦应用和运行平台。在进行迁移的时候,只需要在新的服务器上启动所需的容器即可,而所付出的成本是极低的。

Docker最初是由dotCloud公司的创始人Solomon Hykes所带领的团队发起的,其主要项目代码在GitHub上进行维护。早期的Docker代码实现是直接基于LXC的,自0.9版本起,Docker开发了Libcontainer项目。Libcontainer作为更广泛的容器驱动实现,替换了LXC的实现。2013年3月,Docker开源版本正式发布;2013年11月,RedHat 6.5正式版集成了对Docker的支持;2014年4月—6月,Amazon、Google和Microsoft的云计算服务相继宣布支持Docker;2014年6月,随着DockerCon 2014大会的召开,Docker 1.0正式发布;2015年6月,Linux基金会在DockerCon 2015大会上与AWS、思科、Docker等公司共同宣布成立开放容器项目(Open Container Project,OCP),旨在实现容器标准化,该组织后更名为开放容器标准(Open Container Initiative,OCI);2015年,浙江大学SEL实验室携手Google、Docker、华为等公司,成立了云原生计算基金会(Cloud Native Computing Foundation,CNCF),共同推进面向云原生应用窗口云平台,并从Docker 1.1开始,进一步演进为使用RunC和Containerd。

1.1.2 Docker的概念与特点

目前,Docker的官方定义如下:Docker是以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计,用于构建、发布和运行分布式应用的平台。它是一个跨平台、可移植且简单易用的容器解决方案。Docker的源代码托管在GitHub上,基于Go语言开发,并遵从Apache 2.0协议。Docker可在容器内部快速自动化地部署应用,并通过操作系统内核技术(namespace、CGroups等)为容器提供资源隔离与安全保障。

在开发和运维过程中,Docker具有以下几方面的优点。

1.更快的交付和部署

容器消除了线上和线下的环境差异,保证了应用生命周期环境的一致性和标准化。使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接部署软件镜像来进行测试和发布,以确保开发测试过的代码可以在生产环境中无缝运行,大大简化了持续集成、测试和发布的过程。

Docker可以快速创建和删除容器,实现快速迭代,大量节约了开发、测试、部署的时间。此外,整个过程全程可见,使团队更容易理解应用的创建和工作过程。

2.高效的资源利用和隔离

Docker容器的运行不需要额外的虚拟化管理程序(Virtual Machine Manager(VMM)及Hypervisor)支持,它是内核级的虚拟化,与底层共享操作系统,系统负载更低,性能更加优异,在同等条件下可以运行更多的实例,更充分地利用系统资源。

虽然Docker容器间是共享主机资源的,但是每个容器所使用的CPU、内存、文件系统、进程、网络等都是相互隔离的。

3.环境标准化和版本控制

Docker容器可以保证应用在整个生命周期中的一致性,保证提供环境的一致性和标准化。Docker容器可以像Git仓库一样,按照版本对提交的Docker镜像进行管理。当出现因组件升级导致环境损坏的状况时,Docker可以快速地回滚到该镜像的前一个版本。相对虚拟机的备份或镜像创建流程而言,Docker可以快速地进行复制和实现冗余。此外,启动Docker就像启动一个普通进程一样快速,启动时间可以达到秒级甚至毫秒级。

4.更轻松的迁移和扩展

Docker容器几乎可以在所有平台上运行,包括物理机、虚拟机、公有云、私有云、个人计算机、服务器等,并支持主流的操作系统发行版本。这种兼容性可以让用户在不同平台之间轻松地迁移应用。

5.更简单的维护和更新管理

Docker的镜像与镜像之间不是相互隔离的,它们之间是一种松耦合的关系。镜像采用了多层文件的联合体,通过这些文件层,可以组合出不同的镜像,使利用基础镜像进一步扩展镜像变得非常简单。由于Docker秉承了开源软件的理念,因此所有用户均可以自由地构建镜像,并将其上传到Docker Hub上供其他用户使用。

使用Dockerfile时,只需进行少量的配置修改,就可以替代以往大量的更新工作,且所有修改都以增量的方式被分发和更新,从而实现高效、自动化的容器管理。

任务实现

1.调研Docker与传统虚拟机的区别

传统虚拟机运行在宿主机之上,具有完整的操作系统。其自身的内存管理通过相关的虚拟设备进行支持。在虚拟机中,可为用户操作系统和虚拟机管理程序分配有效的资源,从而在单台主机上并行运行一个或多个操作系统的多个实例。每个客户操作系统都作为主机系统中的单个实体运行,但会占用较多的CPU、内存及硬盘资源。传统虚拟机架构如图1-1所示。

Docker不同于传统的虚拟机,Docker容器是使用Docker引擎而不是管理程序来执行的。它只包含应用程序及依赖库,基于Libcontainer运行在宿主机上,因此容器比虚拟机小,并且由于主机内核的共享,可以更快地启动,具有更好的性能、更少的隔离和更好的兼容性。由于Docker轻量、资源占用少,使Docker可以轻易地应用到构建标准化的应用中。Docker架构如图1-2所示。

图1-1 传统虚拟机架构

图1-2 Docker架构

当然,在隔离性方面,英特尔的VT-d和VT-x技术为传统虚拟机提供了ring-1硬件隔离技术,提供的是相对封闭的隔离,它可以帮助传统虚拟机高效使用资源并防止相互干扰。而Docker利用Linux操作系统中的多种防护技术实现了严格的隔离可靠性,并且可以整合众多安全工具。从Docker 1.3.0开始,Docker重点改善了容器的安全控制和镜像的安全机制,极大地提高了使用Docker的安全性。

Docker容器技术与传统虚拟机技术的特性比较如表1-1所示。

表1-1 Docker容器技术与传统虚拟机技术的特性比较

2.调研Docker的用途

与传统虚拟机不同,Docker 提供的是轻量的虚拟化,可以在单个主机上运行多个Docker容器,而每个容器中都有一个微服务或独立应用。例如,用户可以在一个Docker容器中运行MySQL服务,在另一个Docker容器中运行Tomcat服务,两个容器可以运行在同一个服务器或多个服务器上。目前,Docker容器能够提供以下8种功能。

(1)简化配置:传统虚拟机的最大好处是基于用户的应用配置能够无缝运行在任何一个平台上,而Docker在降低额外开销的情况下提供了同样的功能。它能将运行环境和配置放入代码中进行部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间的耦合度。

(2)代码管道化管理:Docker能够对代码以流式管道化进行管理。代码从开发者的机器到生产环境机器的部署,需要经过很多的中间环境,而每一个中间环境都有自己微小的差别,Docker跨越这些异构环境,给应用提供了一个从开发到上线均一致的环境,保证了应用从开发到部署的流畅发布。

(3)开发人员的生产化:在开发过程中,开发者都希望开发环境尽量贴近生产环境,并且能够快速搭建开发环境,使用Docker可以轻易地让几十个服务在容器中运行起来,可以在单机上最大限度地模拟分布式部署的环境。

(4)隔离应用:Docker允许开发人员选择最适合各种服务的工具或技术栈,隔离服务以消除任何潜在的冲突,从而避免“地狱式的矩阵依赖”。这些容器可以独立于应用的其他服务组件,轻松地实现共享、部署、更新和瞬间扩展。

(5)整合服务器:使用Docker可以整合多个服务器以降低成本。由于空闲内存可以跨实例共享,无须占用过多操作系统内存空间,因此,相比于传统虚拟机,Docker可以提供更好的服务器整合解决方案。

(6)调试能力:Docker提供了众多的工具,它们提供了很多功能,包括可以为容器设置检查点、设置版本、查看两个容器之间的差别等,这些特性可以帮助调试缺陷。

(7)多租户环境:Docker能够作为云计算的多租户容器,为每一个租户的应用层的多个实例创建隔离的环境,不仅简单,而且成本低廉。这得益于Docker灵活的快速环境及高效的diff命令。

(8)快速部署:Docker为进程创建了一个容器,不需要启动操作系统,启动时间缩短为秒级,用户可以在数据中心创建、销毁资源而无须担心重新启动带来的开销。通常,数据中心的资源利用率只有30%,这样可以使用Docker进行有效的资源分配,并提高资源的利用率。 06Ud/fd21NkFxSg90cC8WxAbZeOItT70l58GdUiR/AloStbGnYZbjOPANbKtMnm0

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