写点什么

Docker Containers LiveLessons 课程的评论与问答

2016 年 6 月 11 日

由 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

2016 年 6 月 11 日 04:48686
用户头像

发布了 428 篇内容, 共 148.4 次阅读, 收获喜欢 20 次。

关注

评论

发布
暂无评论
发现更多内容

架构师训练营第4周学习总结

不谈

架构师训练营 - 第四周 - 学习总结

韩挺

第四周作业

胡江涛

极客大学架构师训练营

架构师训练营第四周作业

子豪sirius

Python中的浅拷贝和深拷贝

王坤祥

Python 编程 计算机

本周的一些总结

Geek_zhangjian

《了不起的我》:关于「改变」的心理学

强劲九

心理 读书 书籍推荐 看书

Mybatis执行过程源码分析

编号94530

Java 源码分析 mybatis

Redis(一)分布式缓存的作用

奈何花开

Java redis 分布式缓存

「架构师训练营」学习笔记:第 4 周 系统架构知识

Amy

学习 极客大学架构师训练营 第四周 系统架构知识

大型互联网应用系统技术方案

Geek_zhangjian

Week 04 命题作业

卧石漾溪

极客大学架构师训练营

第四周作业

王鑫龙

极客大学架构师训练营

Week 04 学习总结

卧石漾溪

极客大学架构师训练营

架构师训练营第四周学习总结

fenix

互联网架构演化

李广富

维基百科(Wikipedia)网站架构设计分析

架构5班杨娟Jessie

极客大学架构师训练营

可复用架构之分离关注点

松花皮蛋me

java面试 Java 分布式 可复用架构

【架构师训练营】第四周作业

Mr.hou

极客大学架构师训练营

大型互联网系统使用的技术和方案

李广富

一个典型的大型互联网应用系统的技术方案&手段

Amy

极客大学架构师训练营 作业 第四周

极客时间架构师训练营 - week4 - 作业 2

jjn0703

第四周总结

胡江涛

极客大学架构师训练营

架构师训练营第四周-系统架构综述

草原上的奔跑

架构师训练营 - 第四周 - 作业

韩挺

Week4  互联网系统的技术和手段

TiK

极客大学架构师训练营

架构师训练营-week4-作业

晓-Michelle

极客大学架构师训练营

【架构师训练营】第四周总结

Mr.hou

极客大学架构师训练营

互联网架构总结

Lane

极客大学架构师训练营

架构师训练营 No.4 作业

连增申

架构师训练营 Week 04 总结

Wancho

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

Docker Containers LiveLessons课程的评论与问答-InfoQ