基本信息
编辑推荐
《Docker实战》教会读者如何创建、部署和管理Docker容器托管的应用程序,在以一个清晰透彻的对于Docker模式的开篇介绍之后,你将会学到如何在容器内打包应用,包括测试和分发应用的技术。你还将学习如何安全地运行程序及如何管理共享资源。本书使用精心设计的示例教你如何编排容器和应用程序以及它们的安装和卸载。从开发和测试机器到全面的云服务部署的这些领域一路走下来,你会发现使用Docker的各种技术。本书包括:
◎为部署打包容器
◎安装、管理和删除容器
◎使用Docker镜像
◎使用Docker Hub分发
内容简介
计算机书籍
自从2013 年3 月Docker 0.1 版本发布以来,以其为代表的容器技术也走上了快速发展之路,Docker容器在很大程度上改变了软件的架构设计、开发和运维部署方式,也给早些年就提出微服务的架构模式插上了快速起飞的翅膀。《Docker实战》由Docker 社区第一人Jeff Nickoloff 编写,共分为3 部分,第1 部分(第1~6章)重点介绍了Docker 容器的资源隔离和权限控制及基础原理,第2 部分(第7~10 章)详细解释了如何打包构建镜像以及各种镜像分发基础设施的建设,第3 部分(第11~12 章)聚焦于Docker 容器的组合操作,也就是多容器和多主机环境的管理。《Docker实战》图文并茂,结合基本原理和具体案例给大家提供了多个不错的实战机会。
作为目前热门的容器技术类图书,《Docker实战》适用于互联网,云计算,企业级软件开发、架构、测试,以及运维人员快速上手的Docker 容器;同样适用于搭建以Docker 为核心的基础设施,并在生产环境中快速部署应用以及管理容器集群。
作译者
目录
第1 章 欢迎来到Docker 世界 2
1.1 什么是Docker 3
1.1.1 容器 3
1.1.2 容器不是虚拟化 4
1.1.3 在隔离的容器中运行软件 4
1.1.4 分发容器 6
1.2 Docker 解决了什么问题 6
1.2.1 组织有序 7
1.2.2 提高可移植性 8
1.2.3 保护你的机器 9
1.3 为什么Docker 如此重要 10
1.4 何时何处使用Docker 11
1.5 案例:"Hello World" 11
1.6 小结 13
第2 章 在容器中运行软件 14
2.1 从Docker 命令行工具获得帮助 14
2.2 控制容器:建立一个网站的监控器 15
2.2.1 创建和启动一个新的容器 16
2.2.2 运行交互式容器 17
译者序
本书的内容,顾名思义,就是为广大技术人员如何创建、部署和管理Docker 容器以及基于Docker 的应用程序进行理论及实战练习准备的。对于Docker 容器的工作原理以及每一个具体功能都面面俱到,特别地,对于如何在生产环境中部署管理Docker 容器和集群,本书也花了很多的笔墨在探讨。
以Docker 为代表的容器适合运行所有的无桌面的服务型应用,从2013 年3 月Docker0.1 版本发布以来,在短短的四年时间里,Docker 已经风靡全球的互联网技术圈。回顾过去的四年,Docker 容器技术可以说是每年都上一个新台阶,2013 年的小试牛刀,2014 年年中的Docker 1.0 版本的发布以及年底Docker Machine、Swarm 和Compose 三剑客的推出,2015 年Docker 开始进入互联网公司的生产环境部署,以及2016 年开始发力进入企业级应用,CaaS 市场也日渐成熟,与此相呼应的就是整个容器生态圈包括K8S、Mesos 等集群调度系统在内的蓬勃发展以及微服务架构模式的落地开花。特别地,微服务可以说与Docker容器是绝配,目前国内有不少互联网公司包括一些创业公司正在打算或者已经实施基于Docker 容器部署实现各自的微服务架构模式了。
本书在翻译出版阶段,适逢Docker 1.12 版本的发布,该版本的内置Swam 编排机制可以说是划时代性的新特性。由于时间的关系,该部分最新的内容还无法及时写入到本书中,不过没有关系,大家在阅读本书时,也可以看到作者对于容器集群编排系统是如何做出一些前瞻性的预判的介绍。相信大家通过阅读本书,都会受益匪浅!
胡震
上海凡用信息科技有限公司 CTO
前言
早在2013 年,我想使用Graphite(监控数据的收集和绘图套件)工作。有一天,我要安装该软件,并开始整合个人项目。应付这些事情,我有几年开源工具的使用经验,但很少依赖于Python 这么大的生态系统。安装说明很长且模糊,在接下来的几个小时里,我发现许多安装步骤没有文档说明。这对一个有较为深入的Python 生态系统知识的人来说,可能显而易见。但对我来说,在尝试了几个安装指南,阅读了相关的配置文件,并和代码库的依赖关系进行了史诗般地战斗后,我认输了。
那是我一生中最沮丧的几个小时。我不想和这个项目再有任何关系。更糟糕的是,因为它,我改变了当前的系统环境,经常使用的那些软件现在变得无法兼容。而要还原这些变化,则需要很长一段时间,让我尴尬不已。
我清楚地记得那年5 月1 日,我在办公室,当我决定看看Hacker News 上面有没有新的方法来提高我的能力时,并于那个被称为Docker 的技术文章,一整个星期上了几次的头版。那天晚上,我决定去试试。我找到了那个网站,在几分钟内安装了软件。我在计算机桌面上运行着Ubuntu,而Docker 只有两个依赖:LXC 和Linux 内核本身。
像其他人一样,我尝试了"Hello,World"的示例,但什么都不会。接下来,我安装了Memcached,一分钟内下载并运行。然后我启用了WordPress,它带着捆绑好的MySQL数据库。我还拉了几个不同的Java、Python 镜像。此时我回想起安装Graphite 那可怕的一天。我打开Docker Index(在Docker Hub 之前),并做了一个快速搜索。
结果出来了,它就在那里--某些用户做好了Graphite 镜像。我抓取下来,并创建了一个新容器,一个简单且配置好的Graphite 服务器就在我的机器上运行了。我只用了不到一分钟的下载时间就搞定了它,而几个月前同样的安装花费了几个小时,结果还是失败。Docker 能够用最简单的示例,以及最小的努力来展现它的价值,我臣服了。
接下来的一周,我通过和好朋友之间关于Docker 和容器的直接对话,测试了他的耐心。我解释了包管理的好处,以及文件系统默认强制隔离可解决的一些管理上的问题;我大谈资源利用效率和初始化延迟问题。我向其他几个同事反复地讲摸索着使用容器的故事。每个人听后都有类似的问题,"哦,这就像虚拟化吗?""如果我有虚拟机,为什么我还需要这个?"问的问题越多,我就想了解得更多。随着项目的普及,我将这个故事分享给了许许多多的人。
当我有机会公开发言时,我开始谈论有关Docker 的内容。在2013 年和2014 年,只有少数人听说过Docker,甚至更少的人在实际中试过该软件。大多数情况下,总有一些怀疑的系统管理员和兴奋的开发人员,而且他们数量相当。人们的反应都大不相同。有些是纯粹的反对者,显然倾向于维持现状。看得出来,他们经历过某些困难,曾经遇到过很类似的日常问题。而另一些人的兴奋反应和我很相似。
2014 年的夏天,Manning 的副发行人打电话给我,让我谈谈Docker。在手机上谈了一个多小时后,他问我是否有足够的内容构成一本书。我的看法是这些内容足够几本书。他问我,是否有兴趣写写,这让我变得更加兴奋,虽然那时我用Docker 已经有一段时间了。那年秋天,我离开Amazon.com,然后开始了《Docker 实战》这本书的创作。
今天,我坐在完成的手稿面前。写这本书的目的是让更多的人能尽快学会使用Docker,在本书中,他们也将了解基本的机制和原理。我希望读者有了这些知识后,可以理解Docker是如何被应用到实际问题中,以及如何更好地应用在自己的实例中。
序言
Docker 大大改变了多数软件的开发和运维模式。架构设计、开发,以及运维方式,在Docker 出现前后有很大的不同。尽管Docker 没有规定具体的方案,但它迫使人们思考微服务和不可变基础设施的方法。
一旦Docker 被更广泛地采用,人们便开始调查Docker 所使用的低层技术,更明确了Docker 的成功并不是技术本身,而是围绕这个项目的人性化接口、API 和生态系统。
许多大公司如谷歌、微软和IBM 都在Docker 项目聚首,并携手合作,使它变得更好,而不是去构建另一个竞争对手。事实上,像微软、Joyent、英特尔和VMware 等公司,虽在Linux 容器实现中都换掉了Docker,却为他们自己的容器产品保留了Docker 的命令行接口。在短短两年时间里,很多新公司都如雨后春笋般成立,为的是增强开发者的体验和填补Docker 生态系统的空白,形成一个健康且热心的Docker 社区。
就我个人而言,我帮助微软发布了其第一款支持跨平台ASP.NET 的正式Docker 镜像。我的下一个贡献,会将Docker 命令行接口移植到Windows。这个项目帮助了许多Windows开发人员熟悉Docker,奠定了微软对Docker 项目进行长期贡献的基础。Windows 移植项目也让我以少数Docker 贡献者的视角工作了两个多月。后来,我们还有许多其他的贡献,以确保Docker 成为微软Azure 云服务的重要工具。我们下一个大的目标就是Windows 容器,以及将Windows Server 2016 的新功能与Docker 完全集成在一起。
令人兴奋的是,我们还在容器革命的初期。一切快得令人难以置信,随着每天出现的新技术和开源工具,如今,我们认为这一切将理所当然地会在未来数个月内继续发生改变。就在这个领域,创新者和我们行业最伟大的头脑正在合作,为软件行业的其他领域,打造大量的创新工具,使发布和运行软件不再受到规模变化的影响。
通过许多发表在网上有关Docker 和微服务的文章,Jeff Nickoloff 将自己定位为新兴的Docker 社区的第一人。他良好的写作功底加上对技术性话题的详细解答,能帮助开发人员快速学习和使用Docker 生态系统,并从中受益。而且,同样重要的是,他还指出了Docker的缺点。本书从零开始,展示了在生产环境中Docker 的部署,描述了Docker 拥有的复杂功能,并对相同任务的多种实现方案进行了比较。
在阅读本书时,你不仅要学会如何有效地使用Docker,也一定要弄明白它的工作原理,Docker 每一个详细功能如何使用,以及在生产环境中使用Docker 的最佳方法。我个人在读本书时,有很多"哦,这个功能是做这个的呀"的时刻。写这本书,特别是针对一项总是以惊人速度在变革的技术,就像是在一辆行驶速度为60 英里/小时的车子上画画一样困难。Jeff 的出色工作,既覆盖了Docker 的前沿功能,又为本书奠定了一个坚实的理念基础,即无论Docker 在未来的几个月甚至几年中有什么样的变化,本书关于容器和微服务的理念,不会改变。
希望你和我一样觉得能从这本书受益匪浅。
Ahmet Alp Balkan
微软开放源码软件工程师
Docker 贡献者
媒体评论
2016 年4 月中旬DockOne.io 社区的发起人李颖杰找到了杨润青、黄帅和我三位社区译者,说要配合电子工业出版社翻译Docker 大神Jeff Nickoloff 的新书——《Docker 实战》,我们仨欣然答应。这一方面是出于对大神的景仰,另一方面也是我们DockOne.io 社区以及我们每一位会员想为国内Docker 容器技术的发展添砖加瓦。紧张的翻译工作从今年4 月底开始,到6 月底交稿,之后我们又配合出版社完成了本书的审读工作,今天我们终于看到本书中文版《Docker 实战》的出版。此时此刻的心情我们也是非常激动,感谢我们DockOne.io社区以及出版社的小伙伴,大家都是好样的。
本书的内容,顾名思义,就是为广大技术人员如何创建、部署和管理Docker 容器以及基于Docker 的应用程序进行理论及实战练习准备的。对于Docker 容器的工作原理以及每一个具体功能都面面俱到,特别地,对于如何在生产环境中部署管理Docker 容器和集群,本书也花了很多的笔墨在探讨。
以Docker 为代表的容器适合运行所有的无桌面的服务型应用,从2013 年3 月Docker0.1 版本发布以来,在短短的四年时间里,Docker 已经风靡全球的互联网技术圈。回顾过去的四年,Docker 容器技术可以说是每年都上一个新台阶,2013 年的小试牛刀,2014 年年中的Docker 1.0 版本的发布以及年底Docker Machine、Swarm 和Compose 三剑客的推出,2015 年Docker 开始进入互联网公司的生产环境部署,以及2016 年开始发力进入企业级应用,CaaS 市场也日渐成熟,与此相呼应的就是整个容器生态圈包括K8S、Mesos 等集群调度系统在内的蓬勃发展以及微服务架构模式的落地开花。特别地,微服务可以说与Docker容器是绝配,目前国内有不少互联网公司包括一些创业公司正在打算或者已经实施基于Docker 容器部署实现各自的微服务架构模式了。
本书在翻译出版阶段,适逢Docker 1.12 版本的发布,该版本的内置Swam 编排机制可以说是划时代性的新特性。由于时间的关系,该部分最新的内容还无法及时写入到本书中,不过没有关系,大家在阅读本书时,也可以看到作者对于容器集群编排系统是如何做出一些前瞻性的预判的介绍。相信大家通过阅读本书,都会受益匪浅!
胡震
上海凡用信息科技有限公司 CTO
序
我第一次听说Docker,是通过从2013 年PyCon 会议的YouTube 视频,它被第一时间发布到了Hacker News。Docker 的创始人Solomon Hykes 在他题为“Linux 容器未来”的五分钟谈话中,揭开了未来我们如何对外交付和运行软件,不仅仅是在Linux 中,而是在几乎所有的平台和架构之上。虽然他在第五分钟突然语塞,但毫不影响我清晰地认识这项技术在沙箱环境中运行Linux 应用程序,配以用户友好的命令行工具和镜像分层的独特概念,都将改变很多东西。
Docker 大大改变了多数软件的开发和运维模式。架构设计、开发,以及运维方式,在Docker 出现前后有很大的不同。尽管Docker 没有规定具体的方案,但它迫使人们思考微服务和不可变基础设施的方法。
一旦Docker 被更广泛地采用,人们便开始调查Docker 所使用的低层技术,更明确了Docker 的成功并不是技术本身,而是围绕这个项目的人性化接口、API 和生态系统。许多大公司如谷歌、微软和IBM 都在Docker 项目聚首,并携手合作,使它变得更好,而不是去构建另一个竞争对手。事实上,像微软、Joyent、英特尔和VMware 等公司,虽在Linux 容器实现中都换掉了Docker,却为他们自己的容器产品保留了Docker 的命令行接口。在短短两年时间里,很多新公司都如雨后春笋般成立,为的是增强开发者的体验和填补Docker 生态系统的空白,形成一个健康且热心的Docker 社区。
就我个人而言,我帮助微软发布了其第一款支持跨平台ASP.NET 的正式Docker 镜像。我的下一个贡献,会将Docker 命令行接口移植到Windows。这个项目帮助了许多Windows开发人员熟悉Docker,奠定了微软对Docker 项目进行长期贡献的基础。Windows 移植项目也让我以少数Docker 贡献者的视角工作了两个多月。后来,我们还有许多其他的贡献,以确保Docker 成为微软Azure 云服务的重要工具。我们下一个大的目标就是Windows 容器,以及将Windows Server 2016 的新功能与Docker 完全集成在一起。
令人兴奋的是,我们还在容器革命的初期。一切快得令人难以置信,随着每天出现的新技术和开源工具,如今,我们认为这一切将理所当然地会在未来数个月内继续发生改变。
就在这个领域,创新者和我们行业最伟大的头脑正在合作,为软件行业的其他领域,打造大量的创新工具,使发布和运行软件不再受到规模变化的影响。
通过许多发表在网上有关Docker 和微服务的文章,Jeff Nickoloff 将自己定位为新兴的Docker 社区的第一人。他良好的写作功底加上对技术性话题的详细解答,能帮助开发人员快速学习和使用Docker 生态系统,并从中受益。而且,同样重要的是,他还指出了Docker的缺点。本书从零开始,展示了在生产环境中Docker 的部署,描述了Docker 拥有的复杂功能,并对相同任务的多种实现方案进行了比较。
在阅读本书时,你不仅要学会如何有效地使用Docker,也一定要弄明白它的工作原理,Docker 每一个详细功能如何使用,以及在生产环境中使用Docker 的最佳方法。我个人在读本书时,有很多“哦,这个功能是做这个的呀”的时刻。写这本书,特别是针对一项总是以惊人速度在变革的技术,就像是在一辆行驶速度为60 英里/小时的车子上画画一样困难。Jeff 的出色工作,既覆盖了Docker 的前沿功能,又为本书奠定了一个坚实的理念基础,即无论Docker 在未来的几个月甚至几年中有什么样的变化,本书关于容器和微服务的理念,不会改变。
希望你和我一样觉得能从这本书受益匪浅。
Ahmet Alp Balkan
微软开放源码软件工程师
Docker 贡献者
书摘
2016 年4 月中旬DockOne.io 社区的发起人李颖杰找到了杨润青、黄帅和我三位社区译者,说要配合电子工业出版社翻译Docker 大神Jeff Nickoloff 的新书——《Docker 实战》,我们仨欣然答应。这一方面是出于对大神的景仰,另一方面也是我们DockOne.io 社区以及我们每一位会员想为国内Docker 容器技术的发展添砖加瓦。紧张的翻译工作从今年4 月底开始,到6 月底交稿,之后我们又配合出版社完成了本书的审读工作,今天我们终于看到本书中文版《Docker 实战》的出版。此时此刻的心情我们也是非常激动,感谢我们DockOne.io社区以及出版社的小伙伴,大家都是好样的。
本书的内容,顾名思义,就是为广大技术人员如何创建、部署和管理Docker 容器以及基于Docker 的应用程序进行理论及实战练习准备的。对于Docker 容器的工作原理以及每一个具体功能都面面俱到,特别地,对于如何在生产环境中部署管理Docker 容器和集群,本书也花了很多的笔墨在探讨。
以Docker 为代表的容器适合运行所有的无桌面的服务型应用,从2013 年3 月Docker0.1 版本发布以来,在短短的四年时间里,Docker 已经风靡全球的互联网技术圈。回顾过去的四年,Docker 容器技术可以说是每年都上一个新台阶,2013 年的小试牛刀,2014 年年中的Docker 1.0 版本的发布以及年底Docker Machine、Swarm 和Compose 三剑客的推出,2015 年Docker 开始进入互联网公司的生产环境部署,以及2016 年开始发力进入企业级应用,CaaS 市场也日渐成熟,与此相呼应的就是整个容器生态圈包括K8S、Mesos 等集群调度系统在内的蓬勃发展以及微服务架构模式的落地开花。特别地,微服务可以说与Docker容器是绝配,目前国内有不少互联网公司包括一些创业公司正在打算或者已经实施基于Docker 容器部署实现各自的微服务架构模式了。
本书在翻译出版阶段,适逢Docker 1.12 版本的发布,该版本的内置Swam 编排机制可以说是划时代性的新特性。由于时间的关系,该部分最新的内容还无法及时写入到本书中,不过没有关系,大家在阅读本书时,也可以看到作者对于容器集群编排系统是如何做出一些前瞻性的预判的介绍。相信大家通过阅读本书,都会受益匪浅!
胡震
上海凡用信息科技有限公司 CTO
序
我第一次听说Docker,是通过从2013 年PyCon 会议的YouTube 视频,它被第一时间发布到了Hacker News。Docker 的创始人Solomon Hykes 在他题为“Linux 容器未来”的五分钟谈话中,揭开了未来我们如何对外交付和运行软件,不仅仅是在Linux 中,而是在几乎所有的平台和架构之上。虽然他在第五分钟突然语塞,但毫不影响我清晰地认识这项技术在沙箱环境中运行Linux 应用程序,配以用户友好的命令行工具和镜像分层的独特概念,都将改变很多东西。
Docker 大大改变了多数软件的开发和运维模式。架构设计、开发,以及运维方式,在Docker 出现前后有很大的不同。尽管Docker 没有规定具体的方案,但它迫使人们思考微服务和不可变基础设施的方法。
一旦Docker 被更广泛地采用,人们便开始调查Docker 所使用的低层技术,更明确了Docker 的成功并不是技术本身,而是围绕这个项目的人性化接口、API 和生态系统。许多大公司如谷歌、微软和IBM 都在Docker 项目聚首,并携手合作,使它变得更好,而不是去构建另一个竞争对手。事实上,像微软、Joyent、英特尔和VMware 等公司,虽在Linux 容器实现中都换掉了Docker,却为他们自己的容器产品保留了Docker 的命令行接口。在短短两年时间里,很多新公司都如雨后春笋般成立,为的是增强开发者的体验和填补Docker 生态系统的空白,形成一个健康且热心的Docker 社区。
就我个人而言,我帮助微软发布了其第一款支持跨平台ASP.NET 的正式Docker 镜像。我的下一个贡献,会将Docker 命令行接口移植到Windows。这个项目帮助了许多Windows开发人员熟悉Docker,奠定了微软对Docker 项目进行长期贡献的基础。Windows 移植项目也让我以少数Docker 贡献者的视角工作了两个多月。后来,我们还有许多其他的贡献,以确保Docker 成为微软Azure 云服务的重要工具。我们下一个大的目标就是Windows 容器,以及将Windows Server 2016 的新功能与Docker 完全集成在一起。
令人兴奋的是,我们还在容器革命的初期。一切快得令人难以置信,随着每天出现的新技术和开源工具,如今,我们认为这一切将理所当然地会在未来数个月内继续发生改变。
就在这个领域,创新者和我们行业最伟大的头脑正在合作,为软件行业的其他领域,打造大量的创新工具,使发布和运行软件不再受到规模变化的影响。
通过许多发表在网上有关Docker 和微服务的文章,Jeff Nickoloff 将自己定位为新兴的Docker 社区的第一人。他良好的写作功底加上对技术性话题的详细解答,能帮助开发人员快速学习和使用Docker 生态系统,并从中受益。而且,同样重要的是,他还指出了Docker的缺点。本书从零开始,展示了在生产环境中Docker 的部署,描述了Docker 拥有的复杂功能,并对相同任务的多种实现方案进行了比较。
在阅读本书时,你不仅要学会如何有效地使用Docker,也一定要弄明白它的工作原理,Docker 每一个详细功能如何使用,以及在生产环境中使用Docker 的最佳方法。我个人在读本书时,有很多“哦,这个功能是做这个的呀”的时刻。写这本书,特别是针对一项总是以惊人速度在变革的技术,就像是在一辆行驶速度为60 英里/小时的车子上画画一样困难。Jeff 的出色工作,既覆盖了Docker 的前沿功能,又为本书奠定了一个坚实的理念基础,即无论Docker 在未来的几个月甚至几年中有什么样的变化,本书关于容器和微服务的理念,不会改变。
希望你和我一样觉得能从这本书受益匪浅。
Ahmet Alp Balkan
微软开放源码软件工程师
Docker 贡献者