产品特色
编辑推荐
Docker技术图书中文版。 Docker核心团队成员著作。 非常适合作为学习Docker的第1本入门书。 本书基于Docker 1.9及以上版本。 Docker是一个开源的应用容器引擎,让开发者可以将他们的应用和依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口。几乎没有性能开销,可以很容易地在机器和数据中心中运行。重要的是,它不依赖于任何语言、框架或包装系统。
内容简介
Docker是一个开源的应用容器引擎,开发者可以利用Docker打包自己的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。 本书由Docker公司前服务与支持副总裁James Turnbull编写,是Docker开发指南。本书专注于Docker 1.9及以上版本,指导读者完成Docker的安装、部署、管理和扩展,带领读者经历从测试到生产的整个开发生命周期,让读者了解Docker适用于什么场景。书中先介绍Docker及其组件的基础知识,然后介绍用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。
作者简介
James是一位技术作家,还是一名开源极客。他的大作是一本讲述流行开源日志工具的书——The LogStash Book。James还写了两本关于Puppet的书,一本是Pro Puppet,另一本是较早的Pulling Strings with Puppet: Configuration Management Made Easy。此外,James还写了Pro Linux System Administration、Pro Nagios 2.0和Hardening Linux这三本书。 James是Kickstarter公司的CTO。之前,James曾担任Docker公司服务与支持副总裁、Venmo公司工程副总裁和Puppet Labs的技术运 李兆海 网名Googol Lee。使用Googol这个名字真的是因为“10的100次方”这个意思,和后来的Google公司没有一点儿关系。多年后端程序员,早期以C、C++为主,后来转向Python,现在以Go为生。曾写过《Golang初探》发表于2011年2月号《程序员》。Docker早期使用者。平时喜欢乱翻书,遇到感兴趣的都会研究一番。 刘斌 具有10余年软件开发经验,关注后台开发技术和各种编程语言。做过电子商务、金融、企业系统以及Android手机开发;写过Delphi,也兼做系统管理员和DBA(现在都改叫DevOps了);既做后台应用,也要调用前台CSS和JavaScript,可还是不敢自称“全栈”(Full Stack);今又舶来“增长黑客”(Growth Hacker),我想我要做一个“增长工程师”(Growth Engineer)。 巨震 北京大学软件工程硕士,服务器端开发者。目前就职于创业公司,使用Node.js、Golang进行服务器端开发。2013年年底开始研究Docker,是Docker中文社区的活跃贡献者,负责Docker技术文章和视频的翻译、校对工作。生活中喜欢美食、骑行,热衷于PC硬件,喜爱折腾,热爱一切计算机相关的技术,坚信技术改变世界。崇拜的技术传奇人物是前id Software首席程序员、现Oculus VR首席技术官John Carmack。
目录
第1章 简介 1
1.1 Docker简介 2
1.1.1 提供一个简单、轻量的建模方式 2
1.1.2 职责的逻辑分离 3
1.1.3 快速、高效的开发生命周期 3
1.1.4 鼓励使用面向服务的架构 3
1.2 Docker组件 3
1.2.1 Docker客户端和服务器 4
1.2.2 Docker镜像 5
1.2.3 Registry 5
1.2.4 容器 5
1.3 能用Docker做什么 6
1.4 Docker与配置管理 7
1.5 Docker的技术组件 8
1.6 本书的内容 9
1.7 Docker资源 10
第2章 安装Docker 11
2.1 安装Docker的先决条件 12
2.2 在Ubuntu和Debian中安装Docker 13
2.2.1 检查前提条件 14
2.2.2 安装Docker 16
2.2.3 Docker与UFW 17
2.3 在Red Hat和Red Hat系发行版中安装Docker 17
2.3.1 检查前提条件 18
2.3.2 安装Docker 19
2.3.3 在Red Hat系发行版中启动Docker守护进程 21
2.4 在OS X中安装Docker Toolbox 22
2.4.1 在OS X中安装Docker Toolbox 22
2.4.2 在OS X中启动Docker Toolbox 23
2.4.3 测试Docker Toolbox 24
2.5 在Windows中安装Docker Toolbox 24
2.5.1 在Windows中安装Docker Toolbox 25
2.5.2 在Windows中启动Docker Toolbox 25
2.5.3 测试Docker Toolbox 26
2.6 使用本书的Docker Toolbox示例 26
2.7 Docker安装脚本 27
2.8 二进制安装 28
2.9 Docker守护进程 28
2.9.1 配置Docker守护进程 29
2.9.2 检查Docker守护进程是否正在运行 30
2.10 升级Docker 31
2.11 Docker用户界面 32
2.12 小结 32
第3章 Docker入门 33
3.1 确保Docker已经就绪 33
3.2 运行我们的第一个容器 34
3.3 使用第一个容器 36
3.4 容器命名 38
3.5 重新启动已经停止的容器 39
3.6 附着到容器上 40
3.7 创建守护式容器 40
3.8 容器内部都在干些什么 41
3.9 Docker日志驱动 42
3.10 查看容器内的进程 43
3.11 Docker统计信息 44
3.12 在容器内部运行进程 44
3.13 停止守护式容器 45
3.14 自动重启容器 46
3.15 深入容器 47
3.16 删除容器 48
3.17 小结 49
第4章 使用Docker镜像和仓库 50
4.1 什么是Docker镜像 50
4.2 列出镜像 52
4.3 拉取镜像 55
4.4 查找镜像 57
4.5 构建镜像 58
4.5.1 创建Docker Hub账号 59
4.5.2 用Docker的commit命令创建镜像 60
4.5.3 用Dockerfile构建镜像 62
4.5.4 基于Dockerfile构建新镜像 65
4.5.5 指令失败时会怎样 67
4.5.6 Dockerfile和构建缓存 68
4.5.7 基于构建缓存的Dockerfile模板 69
4.5.8 查看新镜像 70
4.5.9 从新镜像启动容器 70
4.5.10 Dockerfile指令 74
4.6 将镜像推送到Docker Hub 88
4.7 删除镜像 92
4.8 运行自己的Docker Registry 94
4.8.1 从容器运行Registry 94
4.8.2 测试新Registry 95
4.9 其他可选Registry服务 96
4.10 小结 96
第5章 在测试中使用Docker 97
5.1 使用Docker测试静态网站 97
5.1.1 Sample网站的初始Dockerfile 98
5.1.2 构建Sample网站和Nginx镜像 100
5.1.3 从Sample网站和Nginx镜像构建容器 102
5.1.4 修改网站 104
5.2 使用Docker构建并测试Web应用程序 105
5.2.1 构建Sinatra应用程序 105
5.2.2 创建Sinatra容器 107
5.2.3 扩展Sinatra应用程序来使用Redis 110
5.2.4 将Sinatra应用程序连接到Redis容器 113
5.2.5 Docker内部连网 114
5.2.6 Docker Networking 119
5.2.7 使用容器连接来通信 131
5.2.8 连接容器小结 132
5.3 Docker用于持续集成 132
5.3.1 构建Jenkins和Docker服务器 133
5.3.2 创建新的Jenkins作业 137
5.3.3 运行Jenkins作业 141
5.3.4 与Jenkins作业有关的下一步 143
5.3.5 Jenkins设置小结 143
5.4 多配置的Jenkins 143
5.4.1 创建多配置作业 143
5.4.2 测试多配置作业 147
5.4.3 Jenkins多配置作业小结 149
5.5 其他选择 149
5.5.1 Drone 149
5.5.2 Shippable 149
5.6 小结 149
第6章 使用Docker构建服务 151
6.1 构建第一个应用 151
6.1.1 Jekyll基础镜像 152
6.1.2 构建Jekyll基础镜像 153
6.1.3 Apache镜像 153
6.1.4 构建Jekyll Apache镜像 154
6.1.5 启动Jekyll网站 155
6.1.6 更新Jekyll网站 158
6.1.7 备份Jekyll卷 159
6.1.8 扩展Jekyll示例网站 161
6.2 使用Docker构建一个Java应用服务 161
6.2.1 WAR文件的获取程序 161
6.2.2 获取WAR文件 162
6.2.3 Tomecat7应用服务器 163
6.2.4 运行WAR文件 165
6.2.5 基于Tomcat应用服务器的构建服务 166
6.3 多容器的应用栈 169
6.3.1 Node.js镜像 169
6.3.2 Redis基础镜像 172
6.3.3 Redis主镜像 173
6.3.4 Redis副本镜像 174
6.3.5 创建Redis后端集群 174
6.3.6 创建Node容器 178
6.3.7 捕获应用日志 180
6.3.8 Node程序栈的小结 183
6.4 不使用SSH管理Docker容器 183
6.5 小结 185
第7章 Docker编配和服务发现 186
7.1 Docker Compose 187
7.1.1 安装Docker Compose 187
7.1.2 获取示例应用 188
7.1.3 docker-compose.yml文件 191
7.1.4 运行Compose 193
7.1.5 使用Compose 195
7.1.6 Compose小结 197
7.2 Consul、服务发现和Docker 197
7.2.1 构建Consul镜像 199
7.2.2 在本地测试Consul容器 202
7.2.3 使用Docker运行Consul集群 203
7.2.4 启动具有自启动功能的Consul节点 206
7.2.5 启动其余节点 207
7.2.6 配合Consul,在Docker里运行一个分布式服务 212
7.3 Docker Swarm 221
7.3.1 安装Swarm 222
7.3.2 创建Swarm集群 222
7.3.3 创建容器 225
7.3.4 过滤器 227
7.3.5 策略 229
7.3.6 小结 230
7.4 其他编配工具和组件 230
7.4.1 Fleet和etcd 230
7.4.2 Kubernetes 231
7.4.3 Apache Mesos 231
7.4.4 Helios 231
7.4.5 Centurion 231
7.5 小结 231
第8章 使用Docker API 233
8.1 Docker API 233
8.2 初识Remote API 234
8.3 测试Docker Remote API 236
8.3.1 通过API来管理Docker镜像 237
8.3.2 通过API管理Docker容器 239
8.4 改进TProv应用 242
8.5 对Docker Remote API进行认证 246
8.5.1 建立证书授权中心 246
8.5.2 创建服务器的证书签名请求和密钥 248
8.5.3 配置Docker守护进程 250
8.5.4 创建客户端证书和密钥 251
8.5.5 配置Docker客户端开启认证功能 253
8.6 小结 254
第9章 获得帮助和对Docker进行改进 255
9.1 获得帮助 255
9.1.1 Docker用户、开发邮件列表及论坛 255
9.1.2 IRC上的Docker 256
9.1.3 GitHub上的Docker 256
9.2 报告Docker的问题 257
9.3 搭建构建环境 257
9.3.1 安装Docker 257
9.3.2 安装源代码和构建工具 257
9.3.3 检出源代码 258
9.3.4 贡献文档 258
9.3.5 构建开发环境 259
9.3.6 运行测试 261
9.3.7 在开发环境中使用Docker 261
9.3.8 发起pull request 262
9.3.9 批准合并和维护者 263
9.4 小结 264
前言/序言
《容器化浪潮:从零开始掌握Docker与微服务架构》 简介 在这个快速迭代、技术飞速发展的数字时代,如何构建、部署和管理现代化应用程序成为了所有开发者和运维人员面临的核心挑战。传统的部署方式因其固有的复杂性、环境不一致性以及资源浪费等问题,已经越来越难以满足敏捷开发和弹性扩展的需求。与此同时,以微服务为代表的分布式系统架构正在成为构建大型、复杂应用程序的主流选择,它带来了更高的灵活性、可维护性和可伸缩性,但也随之而来了更高的管理和协作成本。 《容器化浪潮:从零开始掌握Docker与微服务架构》正是在这样的背景下应运而生。本书并非一本介绍特定工具(如“第一本Docker书”)的书籍,而是聚焦于容器化技术这一革命性的理念及其在现代软件开发和运维实践中的深度应用,特别是与微服务架构的完美结合。我们将带领读者,从宏观的容器化愿景出发,逐步深入到Docker这一事实上的行业标准,并以此为基石,探讨如何设计、构建、部署和管理基于微服务理念的复杂系统。 本书旨在为所有希望在这个技术浪潮中乘风破浪的开发者、架构师、运维工程师以及技术决策者提供一套系统、全面且极具实践指导意义的学习路径。我们不回避技术细节,但更注重概念的理解和实际应用。通过本书,您将不仅能够掌握Docker的核心概念和常用命令,更能理解容器化技术如何赋能微服务架构,解决实际业务中的痛点,实现更高效、更可靠、更灵活的软件生命周期管理。 目标读者 初学者: 对容器化技术和微服务概念感到好奇,希望从零开始构建扎实基础的开发者和运维人员。 有一定经验的开发者: 已经接触过Docker或微服务,但希望系统性地深化理解,掌握更高级的用法和最佳实践。 系统架构师: 正在规划或重构系统架构,希望了解容器化和微服务如何帮助实现更优的系统设计和部署策略。 运维工程师: 致力于提升部署效率、简化环境管理、自动化运维流程,并希望掌握现代化部署工具的专业人士。 技术经理和项目负责人: 需要了解容器化和微服务技术对项目开发、部署和成本的影响,以便做出明智的技术选型和资源分配决策。 本书核心内容概览 第一部分:容器化世界的基石——理解容器的本质与Docker的魅力 在这一部分,我们将首先为读者构建对“容器化”这一概念的深刻认知。容器化并非凭空出现,而是对软件部署和运行模式的一次重大革新。我们将深入探讨: 虚拟化与容器化的区别与联系: 澄清虚拟化(如VMware、VirtualBox)与容器化(如Docker)的核心差异,理解为何容器化在许多场景下更具优势。我们将重点分析资源隔离、启动速度、镜像大小等关键对比点。 容器化带来的核心价值: 详细阐述容器化如何解决“在我的机器上可以运行”的世纪难题,如何实现环境的一致性、应用的快速部署、资源的有效利用以及开发与生产环境的无缝对接。 Docker的诞生与演进: 回顾Docker项目的起源,了解其核心组件(如Docker Engine、Docker Daemon、Docker Client)的设计理念,以及它如何迅速成为容器化领域的领导者。 Docker核心概念详解: 镜像 (Image): 深入理解镜像的构成(分层文件系统、Dockerfile)、构建方式(Dockerfile指令解析、构建过程)、仓库(Docker Hub、私有仓库)和生命周期。我们将通过实际的Dockerfile示例,展示如何构建满足不同需求的精简、高效镜像。 容器 (Container): 详细讲解容器是如何由镜像实例化而来,其生命周期(创建、启动、停止、删除),以及容器之间的隔离机制(命名空间、控制组)。 Docker文件系统 (OverlayFS/AUFS): 探索Docker底层的文件系统技术,理解容器层和镜像层的工作原理,以及它如何实现高效的存储和共享。 网络 (Networking): 掌握Docker的网络模型,包括桥接模式、主机模式、None模式等,学习如何配置容器网络,实现容器间的通信以及与外部世界的互联。 存储 (Storage): 理解Docker的数据持久化方案,包括卷 (Volumes) 和绑定挂载 (Bind Mounts),以及如何管理和迁移容器数据。 Docker核心命令实践: 通过大量实操案例,熟练掌握Docker CLI的常用命令,包括`docker build`, `docker run`, `docker ps`, `docker images`, `docker exec`, `docker logs`, `docker commit`, `docker push`, `docker pull`等,并讲解其参数和最佳实践。 Dockerfile的最佳实践: 学习如何编写健壮、高效、安全的Dockerfile,包括多阶段构建 (Multi-stage builds)、最小化镜像体积、利用缓存、善用`COPY`和`ADD`命令、设置健康检查 (Healthcheck) 等。 第二部分:拥抱微服务——容器化架构下的设计、构建与部署 在掌握了Docker的基础知识后,我们将进入更广阔的应用领域——微服务架构。这一部分将聚焦于如何利用容器化技术,高效地构建和管理由多个独立服务组成的复杂系统。 微服务架构的核心理念: 深入理解微服务的设计原则,如单一职责、独立部署、技术异构性、去中心化治理等,以及它与传统单体架构的对比优势。 微服务与容器化的天然契合: 阐释为何容器化是实现微服务架构的理想技术。容器如何提供独立的运行环境、简化服务的打包与部署、隔离不同服务的依赖,并为弹性伸缩奠定基础。 设计微服务: 服务拆分策略: 探讨如何根据业务领域、数据关联性、技术栈等因素,合理地将大型应用拆分成独立的微服务。 服务间通信: 学习不同通信模式(如同步RESTful API、异步消息队列Kafka/RabbitMQ)的设计与实现,以及在容器化环境中如何配置服务发现 (Service Discovery)。 数据一致性: 讨论在分布式系统中处理数据一致性的挑战,如最终一致性、Saga模式等。 构建与打包微服务: 为每个微服务创建独立的Docker镜像: 学习如何为不同的编程语言和框架(如Java Spring Boot, Python Flask/Django, Node.js Express)编写精简高效的Dockerfile,确保每个服务都能独立构建。 统一的构建流程: 建立标准化的CI/CD流水线,实现微服务镜像的自动化构建、测试和推送。 容器编排——应对复杂性的关键: Docker Compose: 学习使用Docker Compose来定义和运行多容器Docker应用程序。我们将演示如何配置YAML文件,以声明式的方式管理多个服务的网络、存储和依赖关系,实现本地开发环境的快速搭建。 Kubernetes (K8s) 简介与核心概念: 深入介绍Kubernetes作为容器编排领域的领导者。我们将解析其核心概念,如Pod、Deployment、Service、Namespace、ReplicaSet、StatefulSet、Ingress等,并解释它们在管理大规模容器化应用中的作用。 Kubernetes的部署与使用: 学习如何使用kubectl命令行工具与Kubernetes集群交互,如何部署微服务应用,如何配置服务的伸缩、滚动更新和回滚。 服务发现与负载均衡: 在Kubernetes中,Service如何实现服务之间的通信和负载均衡。 配置管理与持久化存储: 学习ConfigMap和Secret如何管理应用配置,以及PersistentVolume和PersistentVolumeClaim如何为有状态应用提供持久化存储。 构建高可用与弹性伸缩的微服务系统: Kubernetes的自动伸缩: 配置Horizontal Pod Autoscaler (HPA) 实现基于CPU或内存使用率的自动扩缩容。 故障转移与自我修复: 理解Kubernetes如何通过ReplicaSet和Deployment确保应用的高可用性,并在节点或Pod发生故障时进行自动恢复。 滚动更新与蓝绿部署/金丝雀发布: 学习如何在不中断服务的情况下更新微服务,以及如何通过Kubernetes实现零停机更新策略。 第三部分:生产级的容器化实践与高级主题 在掌握了基础知识和微服务应用后,我们将进一步探讨如何在生产环境中安全、高效地运行容器化应用程序,并介绍一些高级主题。 容器安全: 镜像安全扫描: 学习使用工具(如Clair, Trivy)扫描镜像中的漏洞。 运行时安全: 探讨容器的安全配置,如限制容器权限、使用安全策略(如AppArmor, SELinux)、最小化容器运行时用户等。 Secret管理: 如何安全地管理敏感信息(如密码、API密钥)。 日志管理与监控: 容器日志收集: 学习如何配置Docker日志驱动,以及如何使用ELK Stack (Elasticsearch, Logstash, Kibana) 或Prometheus/Grafana等工具集中收集、查询和分析容器日志。 容器性能监控: 介绍Prometheus等监控系统如何收集容器的资源使用情况,以及如何设置告警。 CI/CD流水线整合: Jenkins、GitLab CI/GitHub Actions等工具与Docker/Kubernetes的集成: 学习如何构建自动化构建、测试、部署的CI/CD流水线,实现微服务从代码提交到生产环境的快速、可靠交付。 服务网格 (Service Mesh) 简介: Istio/Linkerd等服务网格的概念与作用: 了解服务网格如何解决微服务架构中的服务发现、流量管理、安全通信、可观察性等复杂问题,并探索其与Docker/Kubernetes的结合应用。 Serverless与容器化: Knative等Serverless框架: 探索容器化技术如何支持Serverless计算模型,实现按需启动、自动缩容等特性。 未来的趋势与展望: WebAssembly (Wasm) 与容器化: 简要介绍Wasm在云原生领域的应用潜力。 可持续的云原生实践。 结语 《容器化浪潮:从零开始掌握Docker与微服务架构》的目标是成为您在这个快速变化的IT世界中,探索和掌握容器化技术及其在现代软件架构中核心地位的可靠向导。我们相信,通过本书系统性的讲解和大量的实践指导,您将能够自信地驾驭Docker,深刻理解并成功实践微服务架构,从而构建出更具竞争力、更具韧性的现代化应用程序。加入我们,一同迎接容器化浪潮的到来,赋能您的技术未来!