具体描述
本书根据Docker 1.10版和Kubernetes 1.2版对第1版进行了全面更新,从实践者的角度出发,以Docker和Kubernetes为重点,沿着“基本用法介绍”到“核心原理解读”到“高级实践技巧”的思路,一本书讲透当前主流的容器和容器云技术,有助于读者在实际场景中利用Docker容器和容器云解决问题并启发新的思考。全书包括两部分,第一部分深入解读Docker容器技术,包括Docker架构与设计、核心源码解读和高级实践技巧;第二部分归纳和比较了三类基于Docker的主流容器云项目,包括专注Docker容器编排与部署的容器云、专注应用支撑的容器云以及一切皆容器的Kubernetes,进而详细解读了Kubernetes核心源码的设计与实现,最后介绍了几种典型场景下的Kubernetes最佳实践。
作者简介
浙江大学软件工程实验室(Software Engineering Lab,SEL)
云计算团队组建于2011年,组织博士和硕士研究生搭建、分析和钻研开源的云计算技术,包括Docker、Kubernetes、Cloud Foundry、OpenStack、CloudStack、Eucalyptus、Convirt、OpenShift等,积极为开源社区贡献代码,管理和参与线上线下讨论社区,参加国内外云计算技术峰会并发言。以开源社区为技术交流研发平台,浙江大学SEL实验室在几年的时间里成长为一个充满热情、富有能力的云计算研发团队,也在国内外开源云计算社区,尤其是在Docker、Kubernetes和Cloud Foundry社区得到了广泛认可。
目录信息
第1章 从容器到容器云 2
1.1 云计算平台 2
1.2 容器,新的革命 3
1.3 进化:从容器到容器云 7
第2章 Docker 基础 8
2.1 Docker的安装 8
2.2 Docker操作参数解读 9
2.3 搭建你的第一个Docker应用栈 16
2.3.1 Docker集群部署 16
2.3.2 第一个Hello World 17
2.3.3 开发、测试和发布一体化 27
第3章 Docker核心原理解读 28
3.1 Docker背后的内核知识 28
3.1.1 namespace资源隔离 28
3.1.2 cgroups资源限制 45
3.2 Docker架构概览 53
3.2.1 Docker daemon 54
3.2.2 Docker client 54
3.2.3 镜像管理 54
3.2.4 execdriver、volumedriver、graphdriver 55
3.2.5 network 55
3.3 client和daemon 56
3.3.1 client模式 56
3.3.2 daemon模式 58
3.3.3 从client到daemon 64
3.4 libcontainer 67
3.4.1 libcontainer的工作方式 69
3.4.2 libcontainer实现原理 70
3.4.3 使用runC与libcontainer进行交互 75
3.5 Docker镜像管理 77
3.5.1 什么是Docker镜像 77
3.5.2 Docker镜像关键概念 80
3.5.3 Docker镜像构建操作 81
3.5.4 Docker镜像的分发方法 84
3.6 Docker存储管理 87
3.6.1 Docker镜像元数据管理 87
3.6.2 Docker存储驱动 89
3.7 Docker数据卷 99
3.7.1 数据卷的使用方式 100
3.7.2 数据卷原理解读 105
3.8 Docker网络管理 108
3.8.1 Docker网络基础 108
3.8.2 Docker daemon网络配置原理 116
3.8.3 libcontainer网络配置原理 119
3.8.4 传统的link原理解析 125
3.8.5 新的link介绍 127
3.9 Docker与容器安全 129
3.9.1 Docker的安全机制 129
3.9.2 Docker安全问题 135
3.9.3 Docker安全的解决方案 139
第4章 Docker 高级实践技巧 151
4.1 容器化思维 151
4.1.1 SSH服务器的替代方案 151
4.1.2 Docker内应用日志管理方案 152
4.1.3 容器化思维及更多 153
4.2 Docker高级网络实践 153
4.2.1 玩转Linux networknamespace 154
4.2.2 pipework原理解析 159
4.2.3 pipework跨主机通信 165
4.2.4 OVS划分VLAN 170
4.2.5 OVS隧道模式 174
4.3 Dockerfile最佳实践 187
4.3.1 Dockerfile的使用 187
4.3.2 Dockerfile实践心得 191
4.4 Docker容器的监控手段 193
4.4.1 Docker容器监控维度 194
4.4.2 容器监控命令 195
4.4.3 常用的容器监控工具 197
4.5 容器化应用构建的基础:高可用配置中心 201
4.5.1 etcd经典应用场景 201
4.5.2 etcd实现原理 206
第二部分 Docker云平台解读
第5章 构建自己的容器云 222
5.1 再谈云平台的层次架构 222
5.2 从小工到专家 225
第6章 专注编排与部署:三剑客与Fleet 230
6.1 编排小神器Fig/Compose 230
6.1.1 再谈容器编排与部署 230
6.1.2 Compose原理:一探究竟 233
6.2 跨平台宿主环境管理工具Machine 237
6.2.1 Machine与虚拟机软件 237
6.2.2 Machine与IaaS平台 238
6.2.3 Machine小结 239
6.3 集群抽象工具Swarm 240
6.3.1 Swarm简介 240
6.3.2 试用Swarm 241
6.3.3 Swarm集群的多种创建方式 243
6.3.4 Swarm对请求的处理 245
6.3.5 Swarm集群的调度策略 245
6.3.6 Swarm集群高可用(HA) 246
6.3.7 Swarm与Machine 247
6.3.8 Swarm小结 248
6.4 编排之秀Fleet 248
6.4.1 旧问题新角度:Docker distro 249
6.4.2 Fleet的原理剖析 252
第7章 专注应用支撑和运行时:Flynn和Deis 258
7.1 Flynn,一个小而美的两层架构 258
7.1.1 第0层:容器云的基础设施 259
7.1.2 第1层:容器云的功能框架 259
7.1.3 Flynn体系架构与实现原理 260
7.2 谈谈Deis与Flynn 270
7.2.1 应用发布上的比较 271
7.2.2 关于Deis的一些思考 273
第8章 一切皆容器:Kubernetes 274
8.1 Kubernetes是个什么样的项目 274
8.2 Kubernetes的设计解读 275
8.2.1 一个典型案例:Guestbook 275
8.2.2 pod设计解读 277
8.2.3 replication controller设计解读 288
8.2.4 service的设计解读 294
8.2.5 新一代副本控制器replica set 306
8.2.6 Deployment 307
8.2.7 DaemonSet 312
8.2.8 ConfigMap 312
8.2.9 Job 317
8.2.10 Horizontal Pod Autoscaler 318
8.3 Kubernetes核心组件解读 320
8.3.1 Kubernetes的整体架构 320
8.3.2 APIServer 321
8.3.3 scheduler 328
8.3.4 controller manager 338
8.3.5 kubelet 346
8.3.6 kube-proxy 352
8.3.7 核心组件协作流程 362
8.4 Kubernetes存储核心原理 366
8.4.1 volume设计解读 366
8.4.2 volume实现原理分析 367
8.4.3 volume使用案例 368
8.4.4 persistent volume 371
8.5 Kubernetes网络核心原理 372
8.5.1 单pod单IP模型 373
8.5.2 pod和网络容器 374
8.5.3 实现Kubernetes的网络模型 377
8.6 Kubernetes多租户管理与资源控制 381
8.6.1 namespace设计解读 381
8.6.2 Kubernetes用户认证机制 385
8.6.3 Kubernetes用户授权机制 387
8.6.4 Kubernetes多维资源管理机制admission control 390
8.7 Kubernetes高级实践 402
8.7.1 应用健康检查 402
8.7.2 高可用性 405
8.7.3 日志 408
8.7.4 集成DNS 410
8.7.5 容器上下文环境 412
8.8 Kubernetes未来动向 414
8.8.1 Ubernetes 414
8.8.2 petSet 415
8.8.3 performance 417
8.8.4 rescheduler 417
8.8.5 OCI标准 419
8.9 不要停止思考 419
第三部分 附录
附录A Docker的安装 424
附录B 阅读Docker源代码的神兵利器 432
附录C 快速熟悉开源项目 441
附录D cgroups的测试与使用 444
附录E cgroups子系统配置参数介绍 448
附录F Kubernetes的安装 453
后记 457
· · · · · · (收起)
读后感
简单说两句,有不对的地方,请多包涵. 这本书是boss推荐的, 1)前部分对docker的原理讲解的很清楚. 这可能是目前很多docker书中所没有的. 2)以容器云的思路思考怎么使用部署docker,这应该是很多公司用docker的难点,因为docker只是一个技术,并不是完整的解决方案. 3)正由于不是一个...
随着互联网技术的快速发展,IT企业也急需在技术之海中迅速找到自己的立足之处,快速学习,快速转型,快速开发,对于一些非紧要系统来说,开源项目方便快捷,迅速掌握相关的技术要点,也急需这样无论是从理论层面还是技术层面都可以深度点拨,开启智慧的技术指南书。 身在互联网...
简单说两句,有不对的地方,请多包涵. 这本书是boss推荐的, 1)前部分对docker的原理讲解的很清楚. 这可能是目前很多docker书中所没有的. 2)以容器云的思路思考怎么使用部署docker,这应该是很多公司用docker的难点,因为docker只是一个技术,并不是完整的解决方案. 3)正由于不是一个...
简单说两句,有不对的地方,请多包涵. 这本书是boss推荐的, 1)前部分对docker的原理讲解的很清楚. 这可能是目前很多docker书中所没有的. 2)以容器云的思路思考怎么使用部署docker,这应该是很多公司用docker的难点,因为docker只是一个技术,并不是完整的解决方案. 3)正由于不是一个...
用户评价
这本书给我最大的感受是,它不仅仅是一本技术手册,更像是一本关于“如何思考”的指南。在阅读的过程中,我不仅仅学会了 Docker 的各种命令和配置,更重要的是,我开始理解容器化背后的设计哲学和解决问题的思路。作者在书中非常强调“声明式”和“可重复性”,这两个概念贯穿了整个 Docker 和容器云的学习过程。比如,在讲到 Dockerfile 的时候,作者反复强调了编写清晰、模块化的 Dockerfile 的重要性,这不仅仅是为了方便管理,更是为了确保每次构建的镜像都是一致的,从而消除“在我机器上可以跑”的经典难题。而在讨论容器编排的时候,作者更是将这种思想延伸到了更宏观的层面,让我明白 Kubernetes 等工具是如何通过声明式的配置,来管理海量的容器实例,并实现自动化的部署、扩展和容错。我特别欣赏书中对“不可变基础设施”的阐述,这颠覆了我过去那种“直接登录服务器修改配置”的习惯。通过容器,我们可以将应用及其依赖打包成一个不可变的单元,需要更新时,就构建新的镜像,然后将新版本的容器替换掉旧版本,这种方式极大地提升了部署的可靠性和可回溯性。书中通过大量的图示和对比,清晰地展现了容器化部署与传统部署模式在效率、安全性和可维护性方面的巨大差异,让我深刻体会到拥抱容器技术的必要性。
我之前对容器云的概念一直停留在比较模糊的层面,总觉得它是一个非常高深且难以触及的技术领域。但读了这本书之后,我才发现,原来容器云的核心就是将容器技术与云计算的弹性、敏捷等特性相结合,为应用提供一个更加高效、灵活的运行环境。书中对容器编排系统,特别是 Kubernetes 的讲解,可以说是点睛之笔。它没有上来就抛出一堆复杂的概念,而是循序渐进地介绍了 Pod、Service、Deployment 等核心组件,并通过生动的比喻,将它们的功能和相互关系解释得明明白白。我尤其喜欢书中关于“声明式API”的讨论,这让我理解了为什么 Kubernetes 能够实现如此强大的自动化管理能力。通过一个 YAML 文件,就可以定义应用的期望状态,然后 Kubernetes 会自动地协调和调度,确保实际状态与期望状态一致。这就像给 Kubernetes 下达一个“指令”,而不是“命令”,它会自动去寻找最佳的执行路径。书中还详细介绍了如何将 Docker 容器部署到 Kubernetes 集群中,包括镜像的构建、推送到仓库、以及在 Kubernetes 中创建 Pod、Service 等资源。这些内容让我对整个容器云的生命周期有了更全面的认识,从开发、构建、部署到运行和管理,都有了清晰的脉络。
这本书的逻辑结构非常清晰,从 Docker 的基础概念,到容器编排,再到容器云的生态系统,层层递进,让读者能够逐步深入。我特别喜欢作者在介绍每个新概念时,都会先回顾之前学过的知识,并说明新概念与旧概念之间的联系。这种“温故而知新”的方式,让我能够更好地巩固所学内容,避免知识点的割裂。例如,在介绍 Kubernetes 的 Pod 概念时,作者会再次强调 Docker 容器的隔离性,并说明 Pod 是 Kubernetes 中最小的可部署单元,它包含一个或多个容器,并且这些容器共享网络和存储卷。这种循序渐进的教学方式,极大地降低了学习门槛。书中还包含了很多关于实际场景应用的讨论,例如如何利用容器进行 CI/CD 流程的构建,如何进行容器的安全加固,以及如何监控和日志管理。这些内容让我意识到,容器化不仅仅是打包和运行应用,更是一个完整的生态系统,需要全面的考虑和规划。我尝试着将书中的一些 CI/CD 实践应用到我的工作中,发现自动化程度有了显著的提升,部署的效率也得到了很大的改善。
这本书在技术细节的把握上做得非常出色,每一个概念的提出,都伴随着清晰的定义、必要的背景介绍和相关的实践操作。作者在书中对 Docker 的各个组件,如 Docker Engine、Docker CLI、Docker Compose 的讲解都非常到位。我尤其对书中关于 Docker Swarm 的介绍印象深刻,虽然 Kubernetes 目前是容器编排的主流,但 Docker Swarm 的简洁易用仍然是很多小型项目和开发测试环境的理想选择。书中详细介绍了如何搭建和管理 Docker Swarm 集群,以及如何使用 Docker Compose 来定义和部署服务到 Swarm 集群中。这让我看到了 Docker 生态系统的完整性和多样性。此外,书中还对容器的可观测性进行了探讨,包括如何进行日志收集(如 ELK Stack)、如何进行指标监控(如 Prometheus 和 Grafana)以及如何进行分布式追踪。这些都是保证容器化应用稳定运行的关键要素,书中提供的指导让我能够构建一个完整的监控和日志分析系统,从而更好地理解和管理我的容器化应用。
这本书在介绍 Docker 的过程中,非常注重对底层原理的剖析。例如,它详细讲解了 Linux 命名空间(Namespaces)和控制组(cgroups)这两个核心技术是如何实现容器的隔离和资源限制的。这对我来说非常有启发,让我不再仅仅把 Docker 当作一个黑盒子,而是理解了它背后是如何工作的。作者通过深入浅出的方式,解释了命名空间如何隔离进程、网络、文件系统等,以及 cgroups 如何对 CPU、内存、磁盘 I/O 等资源进行限制和分配。这种对底层技术的理解,对于我这种喜欢刨根 জিজ্ঞাসা 的读者来说,是极其宝贵的。它不仅能够帮助我更好地掌握 Docker 的使用,更能为我在排查容器问题时提供思路。书中还提到了 cgroups v1 和 v2 的一些差异,以及 Docker 如何利用这些特性来创建一个安全、独立的运行环境。此外,书中还对容器镜像的存储和分层机制进行了详细的阐述,让我明白了为什么 Docker 镜像能够如此高效地进行传输和管理。我对书中关于 OverlayFS 的介绍印象尤为深刻,理解了它如何通过写时复制(Copy-on-Write)的机制,使得多个容器可以共享同一个基础镜像层,从而节省大量的磁盘空间和下载时间。
作为一名对微服务架构深有研究的技术人员,我发现这本书在容器与微服务的结合方面,提供了非常精彩的视角。作者并没有仅仅将 Docker 视为一个独立的工具,而是将其定位为支撑微服务架构的关键基础设施。书中详细探讨了如何利用 Docker 容器化微服务,如何实现服务的拆分、独立部署和弹性伸缩。我尤其欣赏书中关于“服务发现”和“负载均衡”在容器化微服务环境下的实践。通过 Kubernetes 的 Service 和 Ingress Controller,我们可以非常方便地为微服务提供统一的访问入口,并实现流量的动态分配。这极大地简化了微服务之间的通信,提高了系统的整体可用性和可维护性。书中还涉及到了容器化开发中的一些最佳实践,比如如何构建轻量级的 Docker 镜像,如何进行多阶段构建(multi-stage builds)来减小镜像体积,以及如何利用 Docker Compose 来管理本地的微服务开发环境。这些内容对于我这样需要频繁进行微服务开发和测试的开发者来说,是非常实用的。书中的案例分析,更是将理论与实践紧密结合,让我能够更直观地理解容器化微服务带来的优势。
在云计算日益普及的今天,容器技术已经成为构建现代化应用不可或缺的一部分。这本书以其深刻的洞察力和详实的讲解,为我打开了通往容器云世界的大门。作者不仅仅是罗列 Docker 的功能,而是深入剖析了容器化带来的深层变革,以及它如何与云计算的理念相辅相成。我尤其欣赏书中对于“平台即服务”(PaaS)和“容器即服务”(CaaS)的对比分析,让我更清晰地理解了容器云在应用交付模式上的演进。书中对 Docker Hub、Quay.io 等容器镜像仓库的介绍,以及如何利用它们来管理和分发容器镜像,都非常实用。我尝试着在书中指导下,构建了自己的私有镜像仓库,并实现了自动化构建和部署的流程。这让我体会到了容器化带来的极高的效率和灵活性。此外,书中还提及了 Kubernetes 的 Operator Pattern,这是一种非常强大的模式,可以用来管理有状态应用,比如数据库和消息队列。虽然 Operator Pattern 的内容相对深入,但书中提供的概念和示例,已经让我对其有了初步的认识,并激发了我进一步学习的兴趣。
这本书不仅仅是一本关于 Docker 和容器云的入门指南,更是一本能够引导读者深入思考和实践的技术宝典。作者在书中强调了“持续学习”和“拥抱变化”的重要性,这对于快速发展的容器技术领域来说,是非常重要的提醒。书中对未来容器技术的发展趋势,比如 Serverless Containers、Service Mesh 等概念的提及,也让我对这个领域有了更前瞻性的认识。我尤其喜欢书中关于“将容器作为一种编程模型”的讨论,这让我看到了容器化不仅仅是技术工具的革新,更是对软件开发和部署思维模式的深刻改变。我尝试着将书中关于“容器编排即基础设施”的理念应用到我的团队协作中,发现团队的整体效率得到了显著的提升,部署的流程也变得更加流畅和可控。这本书为我提供了一个非常扎实的基础,让我能够在这个日新月异的技术领域中,保持学习的热情和前进的动力。我非常期待未来能够看到更多关于容器云深入实践和最新发展的书籍。
这本书的标题吸引了我,我一直对 Docker 和容器技术非常感兴趣,尤其是在接触了云原生概念之后,感觉了解容器的底层原理和发展脉络是必不可少的。第一眼看到“容器与容器云”这个副标题,我就知道这不仅仅是关于 Docker 命令的堆砌,而是会深入探讨容器在构建和管理云原生应用中的核心作用。翻开书页,作者用一种非常平实的语言,从 Docker 的诞生讲起,一点点剖析了它之所以能颠覆传统部署模式的原因。书中对镜像、容器、仓库这些基本概念的解释,没有那种高高在上的理论说教,而是通过大量形象的比喻和实际操作的引导,让我这个初学者也能很快理解。特别是关于 Dockerfile 的讲解,每一个指令的作用和最佳实践都讲得清清楚楚,让我意识到编写一个高效、安全的 Dockerfile 是多么重要。而且,书中并没有止步于 Docker 本身,而是巧妙地将容器技术融入到云环境的讨论中,让我看到了容器是如何支撑起整个云原生架构的。我尤其喜欢书中对于容器生命周期管理的探讨,以及如何利用容器进行微服务拆分和部署的案例分析,这些内容让我对如何将容器技术落地到实际项目中有了更清晰的思路。书中的配图和代码示例也非常丰富,这对于我这样动手能力比较强的人来说,无疑是极大的帮助。我尝试着跟着书中的步骤操作,发现每一步都非常顺畅,几乎没有遇到什么障碍。
这本书的讲解方式非常接地气,作者在书中穿插了大量的个人经验和行业观察,让整个阅读过程充满了趣味性,而不是枯燥的技术说明。我可以感受到作者在编写这本书时,投入了大量的心血,力求将复杂的概念以最易于理解的方式呈现出来。例如,在解释容器网络模型时,作者并没有直接使用晦涩的术语,而是通过类比和实际的网络配置示例,来帮助读者理解不同网络驱动(如 bridge, host, none)的差异以及它们在实际应用中的选择。我尝试着按照书中的指导,配置了不同的网络模式,并观察了容器之间的通信情况,这让我对容器网络的复杂性有了更直观的认识。书中还提到了很多关于容器安全性的议题,比如如何限制容器的特权,如何对容器进行漏洞扫描,以及如何利用 SELinux 和 AppArmor 来增强容器的安全性。这些内容对于我这种非常重视安全性的开发者来说,无疑是雪中送炭。我特别喜欢书中关于“安全即代码”的理念,这让我意识到安全应该贯穿于容器生命周期的每一个环节。
一直没买书 等读到的电子版的时候 2018年了 1.11 好多内容 都过时了
写得很不错的书,从概念到机制都讲得很明白。对这方面不是很懂,仅当科普扫盲之用,跳过了很多细节
很棒,对Docker的原理有比较详尽的解释,深度够了。而且国人之作没有翻译问题,推荐。如果硬要挑毛病的话实践的部分少了点,可以再补充一本偏实践的Docker书看看。另外最好对Windows上对Docker实现也介绍一下,这样就圆满了。
docker写得蛮不错的,很博客风吧 不过有时候我想,如果有了书目录之后,按着目录找网上博客不就好了么? (当然这么做可能毕竟麻烦)
讲的有点深入,缺少点高屋建瓴。后面还有讲 k8s 之外的编排,有点浪费。总的来说不错。