Docker 实践

内容简介

本书由浅入深地讲解了 Docker 的相关内容,涵盖从开发环境到 DevOps 流水线,再一路到生产环境的整个落地过程以及相关的实用技巧。书中介绍 Docker 的核心概念和架构,以及将 Docker 和开发环境有机、高效地结合起来的方法,包括用作轻量级的虚拟机以及构建和宿主机编排、配置管理、精简镜像等。不仅如此,本书还通过“问题/解决方案/讨论”的形式,将“Docker 如何融入 DevOps 流水线”“如何在生产环境落地”等一系列难题拆解成 101 个相关的实用技巧,为读者提供解决方案以及一些细节和技巧方面的实践经验。

阅读本书,读者将学到的不只是 Docker,还包括持续集成、持续交付、构建和镜像管理、容器编排等相关领域的一线生产经验。本书编写时一些案例参考的 Docker 版本是 Docker 1.9。

本书主要内容:

  • 加速 DevOps 流水线
  • 成本低廉地替换虚拟机
  • 提高云端工作流程的效率
  • 使用 Docker Hub
  • 引领到 Docker 生态系统

适读人群

要求读者具备一定的容器管理和运维的基础知识,适合想要将 Docker 投入实践的相关技术人员阅读,尤其适合具有中高级 DevOps 和运维背景的读者阅读。

作者简介

伊恩 · 米尔(Ian Miell)艾丹 · 霍布森 · 塞耶斯(Aidan HobsonSayers) 对 Docker 有所贡献,并且在大规模环境里构建和维护基于 Docker 的基础设施方面有丰富的经验。

本书内容

内容提要

本书由浅入深地讲解了 Docker 的相关内容,涵盖从开发环境到 DevOps 流水线,再一路到生产环境的整个落地过程以及相关的实用技巧。书中介绍 Docker 的核心概念和架构,以及将 Docker 和开发环境有机、高效地结合起来的方法,包括用作轻量级的虚拟机以及构建和宿主机编排、配置管理、精简镜像等。不仅如此,本书还通过“问题/解决方案/讨论”的形式,将“Docker 如何融入 DevOps 流水线”“如何在生产环境落地”等一系列难题拆解成101个相关的实用技巧,为读者提供解决方案以及一些细节和技巧方面的实践经验。阅读本书,读者将学到的不只是 Docker,还包括持续集成、持续交付、构建和镜像管理、容器编排等相关领域的一线生产经验。本书编写时一些案例参考的 Docker 版本是 Docker 1.9。

本书要求读者具备一定的容器管理和运维的基础知识,适合想要将 Docker 投入实践的相关技术人员阅读,尤其适合具有中高级 DevOps 和运维背景的读者阅读。

译者简介

吴佳兴,毕业于华东理工大学计算机系,目前是 bilibili 基础平台研发团队的一员,主要研究方向有 CI\CD、监控和运维自动化、基于容器的 PaaS 平台建设、微服务架构等。2014年年底有幸加入 DockOne 社区,作为译者,利用闲暇时间为社区贡献一些微薄的力量。个人博客 devopstarter.info。欢迎邮件联系([email protected])。

黄博文,ThoughtWorks 资深软件工程师/咨询师,担任过开发、测试、运维、技术经理等角色,在国内外多家企业做过技术教练以及技术咨询,拥有丰富的敏捷团队工作经验。目前专注于 DevOps 技术及云端架构,在搭建持续集成及部署平台、自动化构建基础设施、虚拟化环境、云端运维等方面有着丰富的经验。拥有 AWS 解决方案架构师以及开发者证书。个人博客为 www.huangbowen.net,个人邮箱为 [email protected]。译作有《Effective JavaScript》《Html5 和 CSS3 响应式设计指南》《C# 多线程编程实战》《面向对象的思考过程》《基础设施即代码》等。

杨锐,前 ThoughtWorks 咨询师,DevOps 领域持续关注者,任职期间曾任某海外大型项目 DevOps 工程师,对其持续交付、基础设施即代码、流水线即代码等方面进行了持续推动,对云计算、容器化、持续交付等有一定经验。现供职美团点评。

梁晓勇,毕业于厦门大学,现任某互联网金融公司架构师,DockOne 社区编外人员。长期奋战在技术研发第一线,在网络管理、技术开发、架构设计等方面略有心得。热爱互联网技术,积极投身开源社区,对 Docker 等容器技术具有浓厚兴趣。欢迎邮件联系([email protected])。

可能是鄙人的拙见,不过 Docker 真的相当了不起。

在不久以前应用程序还是一些庞大的单体软件,独自运行在一堆钢铁和硅块上。这样的情况持续了很多年,它们拒绝改变,不思进取。对于那些想要快速前行的组织而言,这的确是一个难题,因此虚拟机的崛起也就不足为奇了。应用程序不必再和这些硬件捆绑在一起,这使得一切可以更快更替,也更加灵活。

但是,虚拟机本身也很复杂。它们在其他的机器上模拟出整台计算机,而这台虚拟计算机仍然是异常复杂并且需要管理的。再者,因为虚拟机更小而且更容易被创建,所以围绕着它们也就产生了更多需要管理的东西。

我们到底该如何管理所有的复杂性呢?通过配置管理可以办到,当然,这又是另外一个极其复杂的系统。

Docker 则采取了一种截然不同的做法。如果用户将软件放到一个容器里,它就会将应用程序本身的复杂度与基础设施相隔离开来,这使得基础设施本身可以变得更加简单,而应用程序也更加易于装配。基于这样的组织效率,与虚拟机相比,技术速度和执行效率都有了巨大的飞跃。容器的启动是毫秒级的,而不是分钟级的。内存是共享的,而不是预先分配的。这使得用户的应用程序能够以更低的成本运行,同样也意味着他可以按照想要的方式来架设应用,而不用再受缓慢的、不太灵活的基础设施的制约。

在我第一次见到 Solomon Hykes(即“Docker 之父”)谈论 Docker 并将其与装载集装箱做类比的时候,我便意识到他正在做的是一件了不起的大事。全球航运业建立标准之前的混乱状态可以很好地用来类比容器出现以前管理软件的复杂状态。Solomon 的观点非常有说服力,我甚至为此开了一家公司,专门围绕 Docker 构建工具,这家公司最终被 Docker 公司收购了,并且最终变成了我们现在所熟知的 Docker Compose。

初次见到 Ian 是在伦敦我们组织的某个 Docker 聚会(meetup)上。当时,我们坚称:“Docker 还没有为生产环境做好准备,请不要在生产环境里使用它!”然而,Ian 是何许人也,他无视这个看似明智的建议,一意孤行,非要让它运行在生产环境里。那时,他和 Aidan 一起为 OpenBet 公司工作,当我看到他们用我们当时的代码处理过的货币数额时,真的让我感到有点儿懵。

Ian 和 Aidan 发现,他们在使用 Docker 的过程中收获的价值超越了其测试阶段使用它时伴随而来的不便之处。他们在很早的时候便用上了这一技术,因此,对怎样更好地运用它也有自己独到的见解。他们在 OpenBet 内部构建的工具指出了 Docker 本身缺失的一些东西,而我们之间私下的一些闲聊也实际影响了我们所采用的设计和产品方向。

Docker 自 Ian 和 Aidan 第一次使用以来,已然有了一些长足的进步,到如今已有成千上万的组织在用它来解决遇到的真实问题,如更快地装配软件、管理惊人的复杂性、提高基础设施的效率、解决“这个在我机器上运行得好好的”问题等。这促使我们在构建、部署和管理软件方式上的巨大转变,并且围绕着它正在形成一套全新的工具及理念。容器化的美好前景的确是让人兴奋的,但是它同我们之前所习惯的方式也迥然不同。

对读者而言,恐怕很难从这本书中看到怎样由此及彼,但是这本书中涵盖了大量如何应用 Docker 去解决自己当下遇到的种种问题的实用建议。遵循这些建议,用户的组织将能够快速前行。同时或许更重要的是,构建和部署应用的过程将会变得更有意思。

Ben Firshman

Docker 公司产品管理总监、Docker Compose 联合创始人

前言

2013年9月,浏览黑客志(Hacker News)的时候,我无意中在《连线》上看到一篇介绍一项叫作“Docker”的新技术的文章。在读到这篇文章时,我便意识到 Docker 所拥有的革命性的潜力,并为此兴奋不已。

我为之工作了十余年的这家公司一直饱受软件交付速度不够快的困扰。准备环境是一件高成本、费时、手工且十分不优雅的事情。持续集成几乎没有,而且配置开发环境也是一件很考验耐心的事情。由于我的职位含有“DevOps 经理”的字样,所以我有特别的动力来解决这些问题!

我通过公司的邮件列表招募了一批积极进取的同事(他们中有一位如今是我的合著者),接着我们的创新团队一起努力,将一个尚处于测试阶段的工具变为商业优势,为公司省去了高昂的虚拟机成本,并且开启了构建和部署软件的新思路。我们甚至构建并开源了一款自动化工具(ShutIt),以满足我们的组织的交付需求。

Docker 为我们提供了一个打包和维护的工具,它解决了很多如果仅靠我们自己根本很难逾越的难题。这是开源技术最棒的地方,它为我们提供了利用业余时间接受挑战的机会,帮助克服技术债务,并且每天都能有收获。我们可以从中学到的不只是 Docker,还包括持续集成、持续交付、打包、自动化以及人们该如何应对日新月异的技术革新。

对我们来说,Docker 是一个用途异常广泛的工具。只要使用 Linux 系统来运行软件,Docker 便有用武之地。这也使编写这一主题的图书充满了挑战,毕竟我们的视角是落在广袤的软件本身。为了迎合软件生产方式这样一个本质上的变化,Docker 生态系统也在飞速地产出新的解决方案,这也使写书的任务变得更加艰巨。随着时间的推移,我们开始逐渐了解这些问题和解决方案的本质,而在本书里,我们将竭尽所能地传达这些经验。这可以帮助读者找出满足自己的特定技术和业务约束场景的解决方案。

在聚会上面发表演讲时,我们也为 Docker 在愿意接纳它的组织内部迅速高效地投入使用的方法而感到震撼。本书如实讲述了我们是怎样使用 Docker 的,涵盖了从桌面到 DevOps 流水线,再一路到生产环境的整个过程。因此,这本书可能会显得不那么正统,但是作为工程师来说,我们相信纯粹性有时候必须让步于实用性,尤其是涉及节约成本方面的话题!本书的所有内容均来源于一线生产的实际经验,我们衷心希望读者可以从我们来之不易的经验中获益。

Ian Miell

致谢

如果没有我们最亲近的人的支持、牺牲和耐心,这本书是绝对无法完成的。特别要提到的是 Stephen Hazleton,本书的不少内容正是他为了使 Docker 能够造福我们的客户,同我们一起不懈努力的成果。

几位 Docker 的贡献者和 Docker 的员工还非常热情地在不同阶段帮忙审阅了本书的内容,并且提供了许多有价值的反馈,下面几位阅读了本书的初稿:Benoit Benedetti、Burkhard Nestmann、Chad Davis、David Moravec、Ernesto Cárdenas Cangahuala、Fernando Rodrigues、José San Leandro、Kirk Brattkus、Pethuru Raj、Scott Bates、Steven Lembark、Stuart Woodward、Ticean Bennett、Valmiky Arquissandas 和 Wil Moore III。

最后,本书很大程度上还归功于 Manning 出版社的编辑团队,他们用自己的方式推动我们改进,使这本书虽不至于完美,但已然做到尽可能好。我们希望他们会为在我们身上付出的努力而感到自豪。

Ian Miell 感谢 Sarah、Isaac 和 Rachel,感谢你们忍受我深夜编程,包容一位紧盯着笔记本屏幕的父亲,并且没完没了地念叨“Docker 这 Docker 那,Docker……”,还要感谢我的父母从小就鼓励我去质疑现状,还给我买 Spectrum(腕表)。

Aidan Hobson Sayers 感谢 Mona 的支持和鼓励,感谢我的父母睿智和鼓励的话,还有我的合著者决定命运的那封“有谁试过 Docker 这种东西?”的电子邮件。

关于本书

Docker 可以说是目前增长速度最快的软件项目。它于2013年3月开源,到2016年它已经获得了近30000个 GitHub star 以及超过7500次 fork。它还接受了大量像 Red Hat、IBM、微软、谷歌、思科和 Vmware 这些厂商的 pull request。

Docker 在这个关键时刻的出现正是为了迎合许多软件组织的一个迫切需求:以一种开放和灵活的方式来构建软件,然后在不同环境下能够可靠和一致地部署它。用户不需要学习新的编程语言,购买昂贵的硬件,也无须再为了构建、部署和运行可移植的应用程序而在安装或者配置过程上花费过多工夫。

本书将会通过我们在不同场景下用到的一些技术,带读者领略真实世界里的 Docker 实践案例。我们已经竭力尝试阐明这些技术,尽可能做到无须在阅读前事先具备其他相关技术的知识背景。我们假定读者了解一些基本的开发技术和概念,如开发一些结构化代码的能力,以及对软件开发和部署流程的一些了解。此外,我们认为读者还应了解一些核心的源代码管理理念并且对像 TCP/IP、HTTP 和端口这样的网络基础知识有一个基本的了解。其他不怎么主流的技术会在我们介绍到的时候予以说明。

我们将从第一部分介绍 Docker 的基础知识开始,而到了第二部分,我们将把重点放在介绍如何将 Docker 用到单台机器的开发环境。在第三部分里,我们将介绍 Docker 在 DevOps 流水线中的用法,介绍持续集成、持续交付和测试等内容。本书的最后一部分则覆盖了 Docker 生产实践的内容,重点关注与编排相关的一些备选方案。

Docker 是一个用途广泛、灵活和动态的工具,以至于没有一点儿魄力的话很难追上它快速发展的脚步。我们会尽力通过真实世界的应用和例子让读者更好地理解其中的一些关键概念,目的是希望读者能够有实力、有信心在 Docker 的生态系统里审慎评估未来采用的工具和技术。我们一直在努力让本书变得更像是一次愉快的旅行,即介绍我们在很多方面见证的 Docker 是怎样使我们的生活变得更加轻松甚至于更加有趣的。我们正沉浸在 Docker 以一个别致的方式为我们呈现的覆盖整个软件生命周期的许多有意思的软件技术里,而我们希望本书的读者同样也能分享这样的体验。

路线图

本书包括12章,分为4个部分。

第一部分奠定了本书其余部分的基础,介绍 Docker 的概念并且教读者运行一些基本的 Docker 命令。第2章的一些内容旨在让读者熟悉 Docker 的客户-服务器架构以及如何调试它,这对在非常规的 Docker 配置中定位问题是非常有用的。

第二部分关注熟悉 Docker 以及在自己的机器上如何充分利用 Docker。我们将用到一个读者可能比较熟悉的相关概念——虚拟机,作为第3章的基础,提供 Docker 使用的一些介绍。然后第4章会详细介绍几个我们发现自己每天都在使用的 Docker 技巧。这一部分的最后一章则探索了更为深入的镜像构建方面的主题。

第三部分从关注 Docker 在 DevOps 上下文中的使用开始,从用它完成软件构建和测试的自动化到将它迁移至不同的环境。这一部分还会花一章的篇幅来总结 Docker 的虚拟网络,介绍 Docker Compose,并且覆盖一些更为高级的网络主题,如网络模拟以及 Docker 网络插件等。

第四部分会介绍几个针对在生产环境中如何有效地利用 Docker 的主题。这一部分从第9章开始,在这一章里我们调研了一些最主流的容器编排工具,然后指出了它们往往倾向用在哪些场景。第10章讨论的是安全性的重要话题,阐明了如何锁定在容器里运行的进程,以及如何限制访问对外暴露的 Docker 守护进程。最后两章则会细讲一些在生产环境中运行 Docker 的重要实用信息。第11章会展示如何将经典的系统管理知识应用到容器上下文中,从登录到资源限制,而第12章着眼于一些读者可能遇到的问题并且给出对应的调试和解决步骤。

附录里则是一些以不同方式安装、使用和配置 Docker 的具体细节,包括在虚拟机里以及在 Windows 上。

代码

本书中用到的所有由作者创建的工具、应用以及 Docker 镜像的源代码都可以在 Manning 出版社网站下载,地址是 www.manning.com/books/docker-in-practice,读者也可以在 GitHub 上的 docker-in-practise 组织 https://github.com/docker-in-practice/ 找到这些源代码。Docker Hub上dockerinpractise 用户下的镜像(https://hub.docker.com/u/dockerinpractice/)均是从其中一个 GitHub 仓库自动构建生成的。在这里,我们已经意识到读者可能会有兴趣对技术背后的一些源代码做进一步的研究,因此在技术讨论里也嵌入了相关仓库的链接。

为了方便读者跟进,本书中列出的大量代码均以终端会话的形式,与相应的命令输出一起展示。这些会话里有几件事情要注意一下。

很长的终端命令可能会使用 shell 的续行字符(\)将一条命令分割成多行。虽然读者直接把它贴到自己的 shell 下面运行也能工作,但是读者也可以略去这个续行字符,在一行里键入整条命令。

当输出的部分对于读者来说没有提供额外有用的信息时,它可能会被省略并在相应的位置用省略号([...])替代。

作者在线

购买本书的读者还可免费得到由 Manning 出版社运营的一个私有网站论坛的访问权限,在这里读者可以对本书作出评论,询问技术问题,并获得来自主要作者以及其他读者的帮助。要访问和订阅该论坛的话,请用 Web 浏览器打开 www.manning.com/books/docker-in-practice。该页面将会提供一些信息,包括读者注册后该如何登录到论坛,能获得怎样的帮助,以及论坛里的一些行为准则。

Manning 对读者的承诺是会为其提供一个读者之间以及读者和作者之间进行有价值讨论的场所。但并不承诺作者的参与程度,作者对论坛的贡献目前仍然还是停留在志愿性质(并且是无报酬的)。我们建议读者试着问一些有挑战的问题,以激发作者回答问题的兴趣!作者在线论坛和之前讨论的档案只要书还在发行就一直可以在 Manning 出版社网站上访问。

第一部分 Docker 基础
第1章 Docker 初探
第2章 理解 Docker——深入引擎室
第二部分 Docker 与开发
第3章 将 Docker 用作轻量级虚拟机(上)
第3章 将 Docker 用作轻量级虚拟机(下)
第4章 Docker 日常(上)
第4章 Docker 日常(下)
第5章 配置管理——让一切井然有序(上)
第5章 配置管理——让一切井然有序(下)
第三部分 Docker 与 DevOps
第6章 持续集成:加快开发流水线
第7章 持续交付:与 Docker 原则完美契合
第8章 网络模拟:无痛的现实环境测试(上)
第8章 网络模拟:无痛的现实环境测试(下)
第四部分 生产环境中的 Docker
第9章 容器编排:管理多个 Docker 容器(上)
第9章 容器编排:管理多个 Docker 容器(中)
第9章 容器编排:管理多个 Docker 容器(下)
第10章 Docker 与安全(上)
第10章 Docker 与安全(下)
第11章 一帆风顺——生产环境中的 Docker 以及运维上的考量
第12章 Docker 生产环境实践——应对各项挑战
附录 A 安装并使用 Docker
附录 B Docker 配置
附录 C Vagrant

阅读全文: http://gitbook.cn/gitchat/geekbook/5c0e22e8edba1b6834591ef9

猜你喜欢

转载自blog.csdn.net/valada/article/details/85084870