具体描述
本书详细介绍高级容器引擎Docker的各方面技术,从概念介绍到实战,讨论docker的内容,包含基础概念如:镜像,容器,仓库;从实战中讲解docker的数据管理,网络管理,安全管理;最后,探讨docker的底层相关技术和基于docker的最新技术。
作者简介
曾金龙
计算机硕士,中山大学毕业,就职于迅雷网络,国内覆盖面最广的“迅雷P2P引擎”核心研发成员。研究方向为P2P网络、音视频传输和CEP系统。对Docker技术有着深入的理解,是国内较早将Docker引入到实际软件开发、测试和部署中的人。
肖新华
工学学士,衡阳师范学院毕业,项目架构师。4年互联网软件开发经验,痴迷技术,对新生技术敏感。曾就职于迅雷网络、腾讯科技。
刘清
硕士,华中科技大学毕业,就职于迅雷网络,主要研究方向为移动下载库、音视频传输、调度策略设计等。
目录信息
第1章 Docker简介 2
1.1 Docker简介 2
1.1.1 Docker的概念 5
1.1.2 Docker的背景 5
1.1.3 容器与虚拟机 7
1.1.4 Docker与容器 8
1.1.5 Docker的应用场景 9
1.2 Docker的组件 10
1.3 Docker的相关技术 11
1.4 Docker的安装 12
1.4.1 Ubuntu下的安装 12
1.4.2 Red Hat下的安装 13
1.4.3 OS X下的安装 14
1.4.4 Windows下的安装 15
第2章 容器 17
2.1 容器的管理操作 17
2.1.1 创建容器 17
2.1.2 查看容器 20
2.1.3 启动容器 21
2.1.4 终止容器 22
2.1.5 删除容器 22
2.2 容器内信息获取和命令执行 23
2.2.1 依附容器 23
2.2.2 查看容器日志 24
2.2.3 查看容器进程 25
2.2.4 查看容器信息 25
2.2.5 容器内执行命令 26
2.3 容器的导入和导出 26
第3章 镜像 28
3.1 镜像的概念 28
3.1.1 镜像与容器 28
3.1.2 镜像的系统结构 29
3.1.3 镜像的写时复制机制 30
3.2 本地镜像的管理 30
3.2.1 查看 30
3.2.2 下载 31
3.2.3 删除 33
3.3 创建本地镜像 33
3.3.1 使用commit命令创建本地镜像 33
3.3.2 使用Dockerfile创建镜像 34
3.4 Docker Hub 40
3.4.1 Docker Hub简介 41
3.4.2 镜像的分发 41
3.4.3 自动化构建 43
3.4.4 创建注册服务器 47
第4章 数据卷及容器连接 49
4.1 容器网络基础 49
4.1.1 暴露网络端口 50
4.1.2 查看网络配置 53
4.2 数据卷 54
4.2.1 创建数据卷 54
4.2.2 挂载主机目录作为数据卷 55
4.2.3 挂载主机文件作为数据卷 57
4.2.4 数据卷容器 57
4.2.5 数据的备份与恢复 59
4.3 容器连接 60
4.3.1 容器命名 60
4.3.2 容器连接 60
4.3.3 代理连接 62
第二篇 案例篇:综合案例
第5章 创建SSH服务镜像 66
5.1 基于commit命令的方式 66
5.2 基于Dockerfile的方式 70
第6章 综合案例1:Apache+PHP+MySQL 72
6.1 构建mysql 镜像 72
6.1.1 编写镜像Dockerfile 73
6.1.2 构建和上传镜像 75
6.2 构建apache+php镜像 76
6.2.1 编写镜像Dockerfile 77
6.2.2 构建和上传镜像 79
6.3 启动容器 80
第7章 综合案例2:DLNNM 82
7.1 构建mongodb镜像 83
7.1.1 编写镜像Dockerfile 84
7.1.2 构建和上传镜像 84
7.2 构建Node.js镜像 86
7.2.1 项目源文件 86
7.2.2 编写镜像Dockerfile 88
7.2.3 构建和上传镜像 89
7.3 连接Node.js服务和MongoDB服务 89
7.3.1 制作代理镜像mongoabassador 89
7.3.2 启动MongoDB服务 91
7.3.3 启动Node-Web-API服务 92
7.4 搭建前端Nginx 93
7.4.1 构建镜像并运行 93
7.4.2 验证Web应用 95
第8章 阿里云Docker开发实践 97
8.1 阿里云Docker介绍 99
8.2 部署镜像注册服务器 102
8.3 开发 103
8.3.1 项目开发 103
8.3.2 制作和上传镜像 104
8.4 测试 105
8.5 部署 105
第9章 在阿里云上部署WordPress 107
9.1 初始化阿里云Docker环境 107
9.2 部署MySQL容器 109
9.3 部署WordPress容器 109
第10章 使用私有仓库 112
10.1 使用docker-registry 112
10.2 用户认证 115
第11章 使用Docker部署Hadoop集群 118
11.1 Hadoop简介 118
11.2 构建Hadoop镜像 119
11.3 构建Hadoop集群 122
11.3.1 Ambari简介 123
11.3.2 部署Hadoop集群 123
第三篇 高级篇:高级话题、API、工具及集群管理
第12章 容器网络 128
12.1 容器网络的原理 128
12.1.1 基础网络工具 128
12.1.2 网络空间虚拟化 131
12.1.3 网络设备虚拟化 132
12.1.4 容器运行的4 种网络模式 135
12.1.5 手动配置容器的网络环境 137
12.2 配置及原理 138
12.2.1 基本配置 138
12.2.2 容器互联配置及原理 140
12.2.3 容器内访配置及原理 142
12.2.4 容器外访配置及原理 143
12.2.5 创建点对点连接 144
12.3 网桥 146
12.3.1 配置网桥 146
12.3.2 构建自己的网桥 146
第13章 安全 148
13.1 命名空间 148
13.2 cgroups 151
13.3 Linux能力机制 152
第14章 DockerAPI 154
14.1 API 概述 154
14.2 绑定Docker后台监听接口 155
14.3 远程API 158
14.3.1 容器相关的API 158
14.3.2 镜像相关的API 164
14.4 平台API 167
14.4.1 注册服务器架构及流程 167
14.4.2 操作Hub API 169
14.5 API 实战:docker-py库编程 173
14.5.1 docker-py开发环境的搭建 173
14.5.2 docker-py库编程 174
第15章 Fig 177
15.1 Fig简介 177
15.2 Fig安装 177
15.3 Rails开发环境配置 178
15.4 Django开发环境配置 180
15.5 WordPress开发环境配置 182
15.6 Flocker:跨主机的Fig应用 184
第16章 Kubernetes 189
16.1 Kubernetes简介 189
16.2 核心概念 190
16.2.1 节点 190
16.2.2 Pod 190
16.2.3 服务 191
16.2.4 标签 194
16.3 架构和组件 195
16.3.1 主控节点 195
16.3.2 从属节点 198
16.3.3 组件交互流程 198
16.4 Kubernetes实战 200
16.4.1 环境部署 201
16.4.2 应用操作 207
第17章 shipyard 214
17.1 简介 214
17.2 shipyard操作 217
17.2.1 鉴权 217
17.2.2 引擎 217
17.2.3 容器 220
17.2.4 服务密钥 222
17.2.5 Web钩子密钥 223
17.2.6 事件 223
17.2.7 集群信息 224
第18章 Machine+Swarm+Compose225
18.1 Machine 225
18.2 Swarm 227
18.2.1 架构和组件 228
18.2.2 实操 230
18.2.3 发现服务和调度 233
18.3 Compose 239
第四篇 附录
附录A 常见镜像 242
附录B Docker API列表 262
附录C 参考资料 278
· · · · · · (收起)
读后感
用户评价
这本书的优势在于其对 Docker 生态中“核心工具”的专注和深度挖掘,它成功地将一个看似简单的工具链拆解成了可以被精确控制的各个组件。例如,对于日志系统的处理,它不仅介绍了 `json-file` 驱动,还详细对比了使用 `syslog` 或 Splunk 驱动时的配置差异和数据流向,这对于日志合规性要求高的项目非常有用。作者对每一个配置参数的解释都力求精确无误。不过,当我合上书本时,我立刻意识到它在容器编排的广度上有所取舍。书中几乎没有涉及到 Swarm 或 Mesos 这样的早期编排工具,更不用说当前市场的主流 Kubernetes。这我可以理解,毕竟篇幅有限,但对于希望将 Docker 作为迈向更宏大容器化战略的读者来说,缺乏关于 `docker-compose` 跨主机部署的实践或者如何平滑过渡到编排平台的章节,会留下一个明显的知识断层。这本书更像是一份优秀的“单机 Docker 专家指南”,而非“云原生基础设施构建手册”。要将这些知识转化为大规模生产力,读者必须自行承担连接到编排和云平台 API 的工作。
坦率地说,我花了相当一部分时间在对比市面上几本 Docker 相关的书籍,这本书的视角显得非常独特。它没有将重点放在 Kubernetes 这样的大型编排系统上,而是几乎将全部火力集中在了 Docker 本身的应用和优化上,这一点恰恰是我所需要的,因为我们团队当前的基础设施还处于从虚拟机向容器化迁移的初始阶段,我们需要一个非常扎实的 Docker 基础。书中对于存储驱动(Storage Drivers)的对比分析,简直是教科书级别的详尽,它细致地解释了 Overlay2、AUFS 等文件系统在性能和数据一致性上的权衡,这对我理解容器的文件I/O性能瓶颈至关重要。然而,当我寻找如何在高并发、高负载场景下对容器进行精细化资源限制和实时性能监控的章节时,我发现这部分内容相对较为薄弱。它提到了基本的资源限制参数,但对于如何利用诸如 cgroups v2 提供的更精细的控制手段,或者如何集成 Prometheus/Grafana 进行深入的数据可视化分析,似乎没有展开讨论。这本书更像是构建坚实地基的指南,而不是搭建摩天大楼的蓝图。对于期望快速上手部署复杂云原生应用的读者来说,可能需要在这本书之外,再找一本关于容器监控和运维的专门书籍进行补充。
从排版和阅读体验上讲,这本书的字体选择和行距设置都很舒服,长时间阅读下来眼睛不易疲劳,这对于一本技术书籍来说是加分项。书中大量的命令行输出被格式化得非常清晰,便于读者复制和验证。让我感到惊喜的是,它对多阶段构建(Multi-stage Builds)的介绍非常透彻,不仅展示了如何使用,还深入解释了它如何从根本上减小最终镜像体积和减少不必要的依赖,并提供了几个针对不同编程语言(如 Go 和 Node.js)的优化案例。这无疑是提升开发效率的直接利器。然而,当我尝试在书中寻找关于无状态应用与有状态应用容器化处理的明确指导时,发现区分度不够清晰。例如,对于数据库服务(如 MySQL 或 PostgreSQL)在容器内的持久化存储,虽然提到了卷(Volumes),但对于数据迁移、备份恢复的自动化脚本或最佳实践,似乎没有足够的篇幅来探讨。这本书似乎更偏向于应用层的封装,对于那些需要深度耦合底层文件系统和数据生命周期管理的场景,我们可能需要转向更专业的数据库运维书籍来弥补这方面的知识缺口。
这本书的封面设计相当吸引眼球,那种深邃的蓝色调配上一些简洁的几何图形,立刻给人一种专业、现代的感觉。拿到手里沉甸甸的,感觉内容一定很扎实。我比较看重的是实操性,所以翻开目录时,我第一时间关注的就是有没有大量的代码示例和详尽的步骤说明。我很欣慰地看到,它似乎非常注重从基础概念的梳理入手,比如对容器化技术的起源、Docker Engine 的架构原理做了深入浅出的介绍,这一点对我这种对底层机制好奇的读者来说非常重要。我尤其欣赏作者在讲解镜像构建时,对 `Dockerfile` 中各个指令的底层逻辑进行了详细的剖析,而不是简单地罗列用法。比如说,它似乎没有过多提及如何优化微服务部署的特定工具链,比如使用特定的服务网格技术或先进的 CI/CD 管道的集成策略。更多地,它似乎聚焦于构建一个稳定、高效的单个容器环境的“内功心法”。如果这本书能够更深入地探讨在高度受限的网络环境(比如内网或无公网访问的环境)下如何管理私有仓库和进行离线部署,那会更贴合我目前项目组面临的实际挑战。总体而言,初印象是内容组织严谨,技术深度足够,但可能在企业级应用场景的复杂集成方面,需要读者自己去衔接更多的外部知识。
这本书的叙事风格非常冷静、克制,充满了工程师的严谨感,很少使用夸张的语言来鼓吹技术的好处,而是用大量的事实和代码来证明观点。我特别欣赏它对网络模式的讲解,特别是将 Linux Bridge、Host 网络以及更复杂的 `macvlan` 和 `ipvlan` 进行了隔离级别的对比,配图清晰地展示了数据包流经的路径,这远超出了我在其他资料中看到的平面化描述。这种自底向上的剖析方式,极大地增强了我对网络隔离的安全性的理解。不过,美中不足的是,在涉及到安全加固这一关键领域时,本书的篇幅似乎有些不够。比如,对于 Docker Content Trust (DCT) 的配置和最佳实践,以及如何利用 Seccomp 或 AppArmor 配置文件来最小化容器的攻击面,书中仅是一笔带过。我期待能看到更多关于如何构建最小权限容器的实用模板和针对常见漏洞的防御策略。对于追求极致安全性和合规性的企业环境而言,单纯依靠默认配置是远远不够的,这本书在这一关键环节上的深入度,略显保守,更像是一本“如何让它跑起来”的指南,而非“如何让它安全、健壮地跑起来”的终极手册。
这本还是介绍相对深入些的 推荐!
Docker
为Kubernetes一章买的这本书,也算值了
Docker
还可以,比起其他读过的docker相关书籍,这本算是不错的了。也知道了还可以api调用