# 对本书的赞誉
经过2015年Docker项目的飞速发展,国内的互联网企业开始关注容器技术在生产环境下的使用案例。但是,由于与Docker相关的技术资料还没有得到系统性地整理,国内企业一直在各种实际场景中进行实践,所以本书的出现正好填补了当前生产环境实践的实际需要,让国内容器技术的推广迈出坚实的一步。
——肖德时,数人科技CTO
2015年,不管是传统IT企业、互联网巨头,还是初创公司,大大小小的公司都在实践如何在生产环境中应用Docker来解决其实际问题。在这个过程中会遇到各种各样的问题,如网络和存储驱动如何选型,资源限制不够彻底怎么办,镜像仓库如何做权限控制,容器内健康状况如何监测,容器有哪些安全隐患,以及在容器集群化过程中会遇到哪些问题,如服务发现、弹性伸缩等。这些问题都没有标准答案,这也激发了工程师们的探索乐趣,于是就有了各种各样的实战方案。
本书恰好就是对一些实战方案的归纳和总结。相对于市面上其他Docker图书,我认为这本书价值更大:对工程师们来说,将技术应用到“生产环境”中才是最大的价值和乐趣所在!
——陈轶飞,原百度PaaS平台负责人,国内最早大规模应用Docker的实践者
我在Google从事基于容器的基础设施和集群管理研发多年,许多关于容器使用最佳实践的知识都是通过“代代相传、口口相传”的方式获得的。在Docker迅速流行的同时,在开源社区里却缺少如Google(或其他公司)内部“老工程师对新人倾囊相授实践+真理”的这种奢侈。
在众多讲述Docker自身原理、使用方法的书中,这本书从生产角度出发,将作者在实战中积累的一线经验系统地汇总成了基于Docker搭建生产系统的经验,值得我们借鉴。
——张鑫,才云科技CEO
在深入学习Docker时将面对这样的问题:Docker的流行催生出大量与之相关的新技术,这些新技术有哪些,它们是什么关系,又该如何正确选择?Docker也有适用场景,到底哪些场景适合用?把Docker用在生产环境,是否有成功案例或最佳实践,又该如何操作?如果你正面对这些问题,本书就非常适合你。另外,本书不仅以可以直接应用的真实生产环境示例贯穿始终,还讲解了技术的权衡之道,是Docker进阶的难得好书。
——刘凡,好雨云创始人
Docker进入大家视野已经有段时间了,也历经了多个重要的版本升级。有报告表明,在一线互联网公司中,已经有27%的企业在生产环节中使用到了Docker,先行者已开始从中获益。但目前Docker资料仍停留在概念或者实验级别,关于真正在生产环境中使用Docker的内容则少之又少,最佳实践方面的信息与资料也十分稀缺。
Docker技术对于IT架构乃至软件架构的改变是巨大的,对于想在生产环境中使用Docker的企业和团队来讲,只掌握概念和基本原理是不够的,如何能使用Docker解决自身问题,获得由此带来的收益,需要更多的生产实践方面的内容。
本书以生产部署为背景,讲述Docker在真实环境中的使用,能够给读者一个很好的参考,进而达到让读者“举一反三”的效果,使其能让自身的IT架构提升到一个新的技术高度。
——周东波,首都在线总工程师
Docker的出现不仅是单一技术的诞生,而是整个开发、测试、运维体系的一次变革,是从传统的底层主机化真正向资源服务化转变。Docker也同时改变了广大技术人员的思维模式,让原先枯燥重复的工作变得有趣。
本书非常系统地讲解了Docker在生产环境的搭建和应用,同时详细地讲解了其镜像、网络、存储、安全等方面的知识,是有志于研究Docker的读者必备的书籍。
——孙斌,去哪儿网运维总监
Docker是互联网领域最近两年最火热的技术词语,没有之一。以Docker为代表的容器技术,通过务实的工程创新,正在影响无数企业的IT基础设施以及主流的公有云服务。国内越来越多的互联网企业开始将Docker应用到生产环境中。可以预见,掌握Docker相关知识即将成为软件工程师或运维工程师的必备技能。DockOne.io社区组织翻译的这本书恰逢其时,值得每名IT从业者阅读。
——刘海锋,京东云平台总架构师
容器技术已经是2015年最热的技术。容器技术已经存在数年,为什么Docker作为容器技术的布道者能够有翻天覆地的影响?为什么容器技术能够给传统应用带来好处?如何把传统应用容器化并通过DevOps方式简洁化?如何通过具体参数和方法解决现实问题?如何使用Docker以及Docker实践?
其实还有很多问题需要解决,如应用的复杂性和难维护性、开发与运维的脱离性,以及成本不断攀升的现实性。本书从简入繁,通过具体案例解释具体问题,通过实践帮助读者理解具体问题,对正在或者即将使用基于容器的DevOps的读者有很多益处。
——陈冉,Linker Networks CTO & VP
Docker的出现使得IaaS和PaaS的界限进一步模糊化,引领了云计算技术变革。时下诸多公司正如火如荼地探索在生产环境中如何玩转Docker。本书的特点在于不仅介绍“是什么”,更进一步探讨“如何用”和“为什么用”;不限于某种特定的框架,而是对比各种不同的方案。书中涵盖容器监控、配置管理、安全、调度、持续交付等生产实践经验,想在生产环境中玩转Docker的技术人员定能从中获益。
——吴毅挺,携程CIS-系统研发部总监
- 版权信息
- 版权声明
- 内容提要
- 对本书的赞誉
- 译者介绍
- 前言
- 本书面向的读者
- 谁真的在生产环境中使用Docker
- 为什么使用Docker
- 开发环境与生产环境
- 我们所说的“生产环境”
- 功能内置与组合工具
- 哪些东西不要Docker化
- 技术审稿人
- 第1章 入门
- 1.1 术语
- 1.1.1 镜像与容器
- 1.1.2 容器与虚拟机
- 1.1.3 持续集成/持续交付
- 1.1.4 宿主机管理
- 1.1.5 编排
- 1.1.6 调度
- 1.1.7 发现
- 1.1.8 配置管理
- 1.2 从开发环境到生产环境
- 1.3 使用Docker的多种方式
- 1.4 可预期的情况
- 为什么Docker在生产环境如此困难
- 第2章 技术栈
- 2.1 构建系统
- 2.2 镜像仓库
- 2.3 宿主机管理
- 2.4 配置管理
- 2.5 部署
- 2.6 编排
- 第3章 示例:极简环境
- 3.1 保持各部分的简单
- 3.2 保持流程的简单
- 3.3 系统细节
- 利用systemd
- 3.4 集群范围的配置、通用配置及本地配置
- 3.5 部署服务
- 3.6 支撑服务
- 3.7 讨论
- 3.8 未来
- 3.9 小结
- 第4章 示例:Web环境
- 4.1 编排
- 4.1.1 让服务器上的Docker进入准备运行容器的状态
- 4.1.2 让容器运行
- 4.2 连网
- 4.3 数据存储
- 4.4 日志
- 4.5 监控
- 4.6 无须担心新依赖
- 4.7 零停机时间
- 4.8 服务回滚
- 4.9 小结
- 第5章 示例:Beanstalk环境
- 5.1 构建容器的过程
- 部署/更新容器的过程
- 5.2 日志
- 5.3 监控
- 5.4 安全
- 5.5 小结
- 第6章 安全
- 6.1 威胁模型
- 6.2 容器与安全性
- 6.3 内核更新
- 6.4 容器更新
- 6.5 suid及guid二进制文件
- 6.6 容器内的root
- 6.7 权能
- 6.8 seccomp
- 6.9 内核安全框架
- 6.10 资源限制及cgroup
- 6.11 ulimit
- 6.12 用户命名空间
- 6.13 镜像验证
- 6.14 安全地运行Docker守护进程
- 6.15 监控
- 6.16 设备
- 6.17 挂载点
- 6.18 ssh
- 6.19 私钥分发
- 6.20 位置
- 第7章 构建镜像
- 7.1 此镜像非彼镜像
- 7.1.1 写时复制与高效的镜像存储与分发
- 7.1.2 Docker对写时复制的使用
- 7.2 镜像构建基本原理
- 7.2.1 分层的文件系统和空间控管
- 7.2.2 保持镜像小巧
- 7.2.3 让镜像可重用
- 7.2.4 在进程无法被配置时,通过环境变量让镜像可配置
- 7.2.5 让镜像在Docker变化时对自身进行重新配置
- 7.2.6 信任与镜像
- 7.2.7 让镜像不可变
- 7.3 小结
- 第8章 存储Docker镜像
- 8.1 启动并运行存储的Docker镜像
- 8.2 自动化构建
- 8.3 私有仓库
- 8.4 私有registry的扩展
- 8.4.1 S3
- 8.4.2 本地存储
- 8.4.3 对registry进行负载均衡
- 8.5 维护
- 8.6 对私有仓库进行加固
- 8.6.1 SSL
- 8.6.2 认证
- 8.7 保存/载入
- 8.8 最大限度地减小镜像体积
- 8.9 其他镜像仓库方案
- 第9章 CI/CD
- 9.1 让所有人都进行镜像构建与推送
- 9.2 在一个构建系统中构建所有镜像
- 9.3 不要使用或禁止使用非标准做法
- 9.4 使用标准基础镜像
- 9.5 使用Docker进行集成测试
- 9.6 小结
- 第10章 配置管理
- 10.1 配置管理与容器
- 10.2 面向容器的配置管理
- 10.2.1 Chef
- 10.2.2 Ansible
- 10.2.3 Salt Stack
- 10.2.4 Puppet
- 10.3 小结
- 第11章 Docker存储引擎
- 11.1 AUFS
- 11.2 DeviceMapper
- 11.3 BTRFS
- 11.4 OverlayFS
- 11.5 VFS
- 11.6 小结
- 第12章 Docker 网络实现
- 12.1 网络基础知识
- 12.2 IP地址的分配
- 端口的分配
- 12.3 域名解析
- 12.4 服务发现
- 12.5 Docker高级网络
- 12.6 IPv6
- 12.7 小结
- 第13章 调度
- 13.1 什么是调度
- 13.2 调度策略
- 13.3 Mesos
- 13.4 Kubernetes
- 13.5 OpenShift
- Red Hat公司首席工程师Clayton Coleman的想法
- 第14章 服务发现
- 14.1 DNS服务发现
- DNS服务器的重新发明
- 14.2 Zookeeper
- 14.3 基于Zookeeper的服务发现
- 14.4 etcd
- 基于etcd的服务发现
- 14.5 consul
- 14.5.1 基于consul的服务发现
- 14.5.2 registrator
- 14.6 Eureka
- 基于Eureka的服务发现
- 14.7 Smartstack
- 14.7.1 基于Smartstack的服务发现
- 14.7.2 Nerve
- 14.7.3 Synapse
- 14.8 nsqlookupd
- 14.9 小结
- 第15章 日志和监控
- 15.1 日志
- 15.1.1 Docker原生的日志支持
- 15.1.2 连接到Docker容器
- 15.1.3 将日志导出到宿主机
- 15.1.4 发送日志到集中式的日志平台
- 15.1.5 在其他容器一侧收集日志
- 15.2 监控
- 15.2.1 基于宿主机的监控
- 15.2.2 基于Docker守护进程的监控
- 15.2.3 基于容器的监控
- 15.3 小结
- DockOne社区简介
- 看完了