转载

Docker Containers LiveLessons课程的评论与问答

由Addison-Wesley Professional所推出的 Docker Containers LiveLessons 课程旨在帮助读者了解Docker是什么,以及如何有效地使用Docker。这门总长两个半小时的视频课程面向的是没有这方面经验的实践者,带领他们从安装软件开始,逐步深入更复杂的主题,例如编排等等。InfoQ与该课程的讲师Chris Negus进行了一次访谈。

在过去几年时间里, Docker容器 已成为进程隔离方面一个流行的解决方案。每个容器都包含一个完整的文件系统,以托管运行某个指定应用所需的全部内容,例如代码、运行时、系统工具以及库等等。容器与它的主机环境是完全隔离的,它表现了主机操作系统的一个受限的、自定义的展现,从而使它独立于主机版本中的Linux kernel、平台的发行版本或部署模型。这也意味着,通过开源的、可在本地部署的 Docker Registry ,或基于云环境的 Docker Hub ,就可以方便地共享并移动这些容器。

Docker容器是一种轻量级的解决方案,能够提供与虚拟机类似的功能,但它的开销更小,因为容器与主机运行的是相同的操作系统,能够共享它的kernel,而虚拟机往往包含了一个完整的OS。不过,Docker容器与虚拟机的使用场景并不完全相同,比如容器不支持动态迁移。

Chris Negus所讲授的这门课程将为你展示如何在各种Linux发行版本中使用Docker容器,并从基础内容开始讲解。他首先为读者介绍了如何安装Docker,以及如何从Docker仓库中获取容器及上传容器。Negus接下来演示了如何启动、运行及重启容器、观察容器的内部、以及保存与加载容器的镜像,这些正是容器的基本操作。最后,这门课程的话题又转移至如何创建自定义的容器,并且描述了处理网络、日志记录以及存储方面的一些基本规则。随后又介绍了通过Kubernetes与GearD对多个容器进行编排的主题。

InfoQ与本课程的讲师Chris Negus进行了一次访谈,以更好地了解这门课程以及他对Docker的现状及未来的一些观点。

InfoQ:能否请你做一个简单的自我介绍,并描述一下你在Docker容器领域的相关经验?

Chris Negus:大约两年前,我在Red Hat开始使用Docker。当时给我分派了一个任务,让我帮忙编写一份如何在企业级Red Hat操作系统上使用Docker的文档。Red Hat安排我编写了大量关于Docker、Kubernetes以及Project Atomic的使用方面的文章,在那之后,我的大部分工作是帮助Red Hat编写在企业中构建与部署Linux容器的最佳实践。我也参与了Red Hat Container Development Kit的开发工作,它能够帮助开发者在运行Windows、Mac或者Linux的笔记本或台式机上利用OpenShift以及Red Hat Enterprise Linux开发容器。

InfoQ:你能否为初次接触这一技术的读者简单地介绍一下Docker是什么、哪些人应当关心它,以及容器是什么吗?

Chris:Docker是一个开源软件项目,它为应用的打包及运行定义了一种格式与相应的工具。Linux应用程序通常以包格式(RPM,.deb等)进行分发,它们在安装时会将文件部署在主机的文件系统中。很多情况下,应用程序有着各种依赖,这就需要在主机上安装更多的包。为了让某个应用能够运行而直接在主机的文件系统中安装的软件越多,与运行在该系统中的其他应用之间产生冲突的风险就越大。

而通过使用Docker,应用及其所依赖的软件都被一起保存并传送至一个“Docker镜像”中。Docker镜像可以直接运行(如果没有现成的镜像,它还可以自动地pull到本地系统中并运行),而无需安装Docker应用。应用本身、所依赖的软件以及描述如何运行及使用该应用的元数据都可以包含在镜像中。

在容器模型中,主机本身的机器可以保持其泛用性。由于每个Docker镜像都包含自己的文件系统、网络接口、进程表和其他各种可彼此独立的特性,因此Docker镜像之间的冲突已做到了最小化。Docker容器可以做到快速地启动,与其他应用共同运行。万一出现了任何冲突,也可以将容器干净地移除。

容器化技术为开发者承诺对他们的应用、运行环境更完整的控制,并提供了各种新式工具以开发容器(例如OpenShift)。系统管理员现在需要管理新的实体(容器的镜像)、具有不同配置(通常更为轻量级)的操作系统(例如Atomic Platform和Atomic Host),以及用于部署及管理容器的新式工具(例如Kubernetes)。

InfoQ:容器与虚拟机有什么不同?

Chris:虚拟机具有一个完整的、可启动的操作系统。对于Linux系统来说,这意味着要启动一个kernel以及少量的系统服务。另一方面,容器通常只运行一个进程:即需要运行的应用。容器通常还包括其他一些工具,例如bash shell,在执行后能够与运行中的容器进行交互。但通常来说,你很少会在同一时间内在容器中运行两至三个进程。

一个典型的虚拟机的大小通常是几个GB。由于容器只需要加载运行及管理应用所必要的文件,因此一个典型的容器通常只有几百MB。此外,一般来说,虚拟机需要消耗更大的处理能力。

虽然有人表示容器有朝一日能够取代虚拟机,但虚拟机其实完全可以与容器配合使用。要记住,容器始终需要一个操作系统才能运行。因此,一种常见的实践是通过Red Hat Atomic Host等工具在云环境中启动一个虚拟机,并在该虚拟机中运行多个容器。

InfoQ:可以说,Docker改变了应用的开发与交付方式。你认为是哪些因素在背后驱动了这次变革呢?

Chris:业界的大方向是寻求在数据中心内设置大量的、可扩展的计算、内存以及存储资源的池。如果需要更多的资源,可迅速地接入并启动额外的主机,这是因为每个主机的配置工作都减少了许多。对于开发者来说,这意味着他们要额外承担一部分原本由系统管理员所负责的工作。与之类似,管理员也需要扮演新的角色。

开发者如今不仅要提供运行应用必备的软件,同时还要提供如何将这些零散的片段在运行时环境中连接在一起的信息。比方说,一个完整的应用也许会包含多个容器,提供多种不同的互联的服务。在新的环境中,已经无需系统管理员对物理网络进行设置,并安排让哪些机器提供哪些服务了,所有这些都可以在开发团队所交付的应用中进行虚拟化的配置。

因此,在具体开始部署时,开发者的做法已不再是交付一个RPM包,并列出一系列管理员要完成的工作,才能让应用开始运行。在新的环境中,开发者可能需要设置的是一系列容器,以及一系列用于定义服务以及应用所需的虚拟网络的json文件。开发者还需要定义服务启动的顺序、实际运行的可执行文件、以及容器需要访问主机中的哪些特性(例如存储空间等等)。

InfoQ:Docker怎样融入持续集成(CI)或持续交付(CD)中的管道?

Chris:Docker能够很好地融入持续集成或持续交付模型,因为大部分需要推送至测试、预发布以及生产环境中的代码都已经包含在Docker镜像本身了。从理论上说,无论是测试人员在笔记本上,还是系统集成人员在预发布空间所搭建的环境将因此变得更简单。

目前已经有一些项目的设计时就在整个生命周期中贯彻了Docker镜像的开发应用,例如OpenShift等等。某些工具能够将OpenShift Web UI、oc命令(CLI接口)与编排工具进行紧密的集成,例如Kubernetes。开发者可以通过这些工具创建容器,并当这些容器最终部署至本地数据中心或云环境时检查他们的运行情况。

在CI/CD生命周期中应用容器可能会面临一些挑战,因为事实上,容器与RPM包、ISO镜像或其他用于发布软件的常见方式有所不同。因此,在新出现的CI/CD工具中,仍在研究某些方法,以检验容器中所包含的内容、校验容器的来源、并决定对多容器应用进行监控、升级以及交付的最佳实践。

InfoQ:Docker的另一个应用方向是 hyper-scaling ,你对此怎么看?

Chris:Mesos提供了一种创建大规模物理数据中心,并在其中划分虚拟数据中心的方法。容器这种工作原件可以跨由Mesos管理的数据中心进行分布。但如果你的公司还没有开始应用Mesos,并且尚未打算扩展至上万台乃至更多的机器,那就不必花费精力去搭建Mesos数据中心了,毕竟它非常复杂。

另一种方案是通过Kubernetes管理容器。Kubernetes是Google通过总结其十多年来的容器部署经验而创建的项目,它目前已经能够扩展至在单一的集群中支持超过一千个节点了。如果你还打算更进一步的话,可以选择创建多个Kubernetes集群(Google利用了其Borg项目中开发的软件对大量的Kubernetes集群进行管理)。

即使你目前在使用Kubernetes,也并不妨碍你今后将容器转移至Mesos中。 Kubernetes on Mesos 项目如今已经启动,旨在开发一个能够运行在Mesos上的Kubernetes框架。

InfoQ:Docker怎样帮助公司转向混合云策略?除此之外,你还看到哪些因Docker而出现的用例吗?

Chris:每一个以虚拟机的部署为中心的主流云提供商以及基础设施即服务项目(例如OpenStack)如今都已经加入了对容器部署策略的支持。因此,Docker项目不需要在帮助公司转向混合云策略方面做太多工作。任何一个运行Docker服务的系统都有可能成为公司的混合云策略的一部分,前提是他们能够通过编排工具处理容器在这些系统中的部署与管理。

说到用例,Docker最适合的一种软件就是微服务的运行。开发者可以创建一系列的容器,其中可能包含对应Web服务器、数据库服务器以及文件服务器等服务的容器,每个容器都可以独立地进行部署,并且按需进行向上或向下扩展。你仍然可以通过Kubernetes负责这些容器的编排工作,运行这些系统的机器可能来自你的本地数据中心、远程云环境或是两者的混合体。

InfoQ:在这门LiveLessons课程中,你首先介绍了一些最基本的东西,例如安装软件、创建容器及运行容器等等。随后再进入更复杂的主题,例如容器的编排。你对于初学者有什么建议?如果要成功地掌握Docker知识,有哪些概念及实践是最重要的?

Chris:我始终认为,真正掌握一门新技术的最好方式就是动手去尝试。这也是为什么我在课程中演示了如何搭建一个运行容器的Linux系统,以及如何运行并探索容器的应用。因此,我的第一个建议是动手尝试。

关于要理解的概念,我在LiveLessons课程以及由我撰写的《Docker Containers》一书中都谈到了一样东西,即命名空间的概念。当某个容器在系统中运行时,你可以在容器中打开一个shell,并查看它的进程表、网络接口以及文件系统。观察在容器之内的显示与在主机中的显示有什么不同,能够让你从主机与同一主机中的其他容器的角度了解容器是如何作为独立的实体运行的。

除了命名空间之外,我认为当你准备创建更复杂的、多容器的应用以及更加自动化的部署时,最具有挑战性的主题当属网络与存储了。你很快会发现,除了Docker服务提供的基本功能之外,还需要其他工具的辅助。Kubernetes这样的工具能够帮助你将跨多个容器的服务连接在一起。而通过搭建OpenShift作为你的容器开发平台则能够帮助你选择你的应用所需的存储、网络、认证以及其他特性的配置。

关于受访者

Christopher Negus是一位具有RHCE认证的讲师,同时也是Red Hat, Inc的首席技术作者。他同时具备Red Hat Certified Architect (RHCA)、Red Hat Certified Instructor(RHCI)和Red Hat Certified Examiner(RHCX),以及Red Hat Enterprise Virtualization(RHCVA)、Red Hat Clustering and Storage management和Red Hat Enterprise Deployment and Systems Management等方面的证书。Christopher参与了多本有关Linux与开源软件方面书籍的撰写工作,包括《Linux Bible》、《Red Hat Linux Bible》、《Linux Toolbox series》、《Linux Toys》和《Live Linux CDs》。Chris目前在Red Hat参与多个项目的研发工作,包括与OpenStack、Red Hat Cloud Infrastructure和Docker格式的Linux容器相关的技术。在Chris职业生涯的早期曾经在AT&T的贝尔实验室工作,参与了UNIX System V开发团队的工作。

查看英文原文: Docker Containers LiveLessons Review and Q&A

原文  http://www.infoq.com/cn/articles/docker-containers-review
正文到此结束
Loading...