首页>参考读物>计算机科学与技术>综合

Docker+Kubernetes应用开发与快速上云
作者 : 李文强 编著
出版日期 : 2020-03-10
ISBN : 978-7-111-64301-2
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 388
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

Docker是目前最流行的容器技术之一,Kubernetes(简称k8s)是目前最流行的容器编排平台之一,本书主要围绕Docker和k8s进行讲解。
本书共分为11章。前7章主要讲解Docker相关内容,从发展简史到基础概念,从市场趋势、应用场景到各环境的安装,从基础操作命令到Docker应用持续开发的工作流程,从主流的编程语言实践到数据库容器化。第8~10章主要讲解Kubernetes的相关内容,从主体架构、核心概念到开发、生产环境搭建以及集群故障处理,从应用部署、伸缩、回滚到应用访问,从云端理念到将应用部署到容器云服务。第11章主要讲解容器化之后的DevOps实践,从DevOps的理念到CI、CD的流程和实践,最后讲述如何使用Azure DevOps、Tencent Hub以及自建的TeamCity来完成CI/CD,并附有相关参考流程讲解。

图书特色

Docker+Kubernetes实践全接触
轻松上手,快速入门

图书前言

作为互联网大军中的一员,我经常会思考:如何避免“996”和“ICU”?如何更好地解决软件的交付速度和质量的问题?毕竟过度的加班不仅伤身劳神,结果还不太理想——Bug和问题往往与加班时间成正比,修复问题的时间可能远远大于开发功能的时间。
针对这个问题,我们要一分为二地去看:一方面,我们需要明确自己的远近目标,确保正确的方向以及有效的工作;另一方面,团队需要不断地接受适合自身的先进理念、思维以及工作方式、团队文化、技术和工具,以提高交付速度,并且保障软件交付质量。
关于适合自身的先进理念、思维和工作方式、团队文化、技术和工具,时下流行的有很多,最热门的理念莫过于DevOps。它其实并不是新创造出来的,而是软件工程的过程和方法论变化、进化和升级的必然结果(可以参见本书的第11章)。做好了DevOps实践,团队必然可以更快、更可靠地交付软件,提高客户的满意度。但是,做好DevOps实践不但对团队文化有很高的要求,而且对相关工具、技术、部署环境等也有很高的要求,这对于大部分团队来说是一个极大的挑战——既没有精力,也没有实力。
抛开团队文化等,有没有更易于落地的配合DevOps的解决方案呢?有,那就是以Docker为代表的容器技术作为基础保障、以Kubernetes(简称k8s)为代表的容器编排技术作为支撑的解决方案!它们“出世”并不算早,Docker诞生于2013年,k8s v1发布于2015年,公开面世虽只有短短几年,它们却已经成为相关领域的事实标准。它们的出现是历史的必然,并不能算是新的技术和理念,而是容器技术和容器编排技术演进的创新结果,也是一代又一代互联网人追求高效生产活动的解决方案、思想、工具和愿景。
Docker+k8s短短几年就脱颖而出,除了更易配合DevOps落地之外,还有众多原因(比如Docker更轻、更快、开源、隔离应用,以及k8s便携、可扩展、自动修复等),但是其中很重要的一个原因是,在虚拟机时代那些无法解决或者说很难解决的问题以及那些积压已久的需求(比如分布式系统的部署和运维,物联网边缘计算的快速开发、测试、部署和运维,大规模的云计算,等等)在Docker+k8s 的组合下找到了突破口,并且极大地促进了云计算的发展。尤其是k8s,更是代表了云原生应用平台的未来——它借助Docker和微服务架构的发展迅速崛起,高举着云原生应用的设计法则,硬生生地打败了所有的对手,赢得了一片更广阔的天地和更璀璨的未来(在原有的云计算基础设施上抽象出了云原生平台基础设施,形成了一个高度自治的自动化系统平台)。
开发者普遍将Docker+k8s应用于敏捷开发、DevOps实践、混合云和微服务架构。同时,主流的互联网公司都将应用托管到了应用容器上,比如谷歌、微软、亚马逊、腾讯、阿里、京东、美团和新浪。主流的云厂商均提供了容器服务,并且为之打造了极其强大和丰富的生态。其中许多云厂商还推出了无服务器计算容器实例产品,这意味着容器能够在无服务器计算的基础设施上运行。比如在某些机器学习的场合,用户可以在无服务器计算的基础设施上几秒内启动成千上万个容器,然后挂载共享存储的数据或图像进行处理。当批量处理完成后,容器自动销毁,用户仅需按量付费。
现在的技术发展很快,Docker和k8s的技术点、命令行、接口参数说明以官网为主、本书为辅。一方面,官网的内容往往是最新、最及时的;另一方面,本书更多的是指导大家快速进入相关的实践,分享相关的思维、理念和技巧,并且指导大家将容器应用托管到自建或者云端的k8s集群以及云厂商提供的容器云服务。
为什么要编写本书
促使我编写本书的原因主要有:
? 大家对Docker+k8s的认知程度还比较低,缺乏宏观的认知。
? 大家普遍认为Docker+k8s只是一种单纯的相对先进的技术,不能够很好地理解其优势和趋势,认为其并不能给现有的开发运维体系带来什么改变。而许多同类书籍往往只是介绍了一些技术点和细节,并没有让大家从宏观角度、发展趋势去认知Docker+k8s,也没有很好的体系去指导实践和生产。
? 对于想更好地学习相关知识的开发者,缺少系统的教程以及完整的工作流程的实践案例,不能提供很好的技术引导。这使得普通开发者普遍认为使用Docker+k8s很麻烦,改造成本过大,只有大公司才能用,门槛很高。
? 云端容器服务产品的用户体验不够友好,对于初学者门槛太高(指的是消化这些概念和理念,并且能够掌握和可控);同时,各家云端的容器产品都进行过包装,体验各不相同,和原生的体验也不同。
内容介绍
本书共分为11章。
第1章,主要介绍Docker以及容器技术的发展简史,并且对比Docker和虚拟机,最后讲述Docker的3个基本概念和版本区别,为后续进一步讲解Docker做铺垫。
第2章,主要介绍Docker的市场趋势和主要应用场景。
第3章,主要讲解各个环境(Windows 10、Ubuntu、CentOS、树莓派)下的Docker安装过程,以及如何使用树莓派搭建个人网盘。
第4章,主要结合实践示例讲解Docker的一些镜像操作命令和容器操作命令,以及相关参数,最后介绍如何使用Kitematic来管理Docker容器。
第5章,主要围绕Docker应用开发的持续工作流程进行讲解,在开发、测试、部署整个过程中穿插Dockerfile、Docker Compose等知识、编写准则和要求。最后侧重介绍Visual Studio(VS)和Visual Code对Docker的支持,尤其是如何利用VS一键生成Dockerfile。
第6章,主要讲解如何使用主流的编程语言(例如.NET Core、Java、Go、Python、PHP、Node.js)进行Docker应用开发,如何选择合适的官方镜像,如何查看Docker应用的日志以及资源使用情况等。针对各大编程语言,笔者均精心准备了一些案例,比如使用.NET Core开发云原生应用,使用Python编写博客爬虫,使用PHP搭建个人博客站点等。
第7章,主要讲述主流的数据库容器化并且侧重讲解容器化之后如何持久保存数据。同时,针对SQL Server、MySQL、Redis、MongoDB等主流数据库,从官方镜像开始,结合使用场景、相关的使用和实践以及管理进行讲解。
第8章,主要讲述Kubernetes的主体架构、核心概念、集群搭建和故障处理。
第9章,从k8s应用部署开始,主要讲述其部署流程以及简单的部署示例,然后结合实践讲解应用伸缩(包括自动伸缩)和回滚的相关命令与语法。接下来通过实例讲解如何通过Service、Ingress在集群内外部访问k8s应用。最后讲述使用Helm简化k8s应用的部署。
第10章,从云计算的基础理念开始,讲述上云的问题,并且得出为什么Docker+k8s的组合是上云的不二选择。然后针对国内外主流的云计算提供的容器服务进行说明和讲解,对比自建和托管的成本。接下来给出一个一般服务的部署流程。最后讲解容器上云之后节约成本的一些技巧、方式以及问题处理。
第11章,主要讲述容器化之后的DevOps实践。从“什么是DevOps”“为什么需要DevOps”开始,讲述Docker与持续集成和持续部署,以及参考流程,包括Git代码分支流。最后讲述使用Azure DevOps、Tencent Hub以及TeamCity来完成CI/CD,并附有相关流程。
下载资源
本书的脚本和代码可以从GitHub(https://github.com/xin-lai/docker-k8s)下载。如果下载有问题,请发送电子邮件至booksaga@126.com,邮件主题为“求Docker+Kubernetes应用开发与快速上云下载资源”。
读者群体
? 开发工程师
? 运维工程师
? 架构师
? 测试工程师
? 技术经理
? 学生
? 其他对容器以及容器编排感兴趣的人
致 谢
写书的过程还是比较漫长的,从策划到成稿,整个过程涉及很多的环节和细节,而且因为个人时间有限导致进度多次受阻,也犯了很多低级错误。最开始对笔记梳理和整合,然后形成知识体系,这其中的难度比预想的大了许多,如书中的技术术语是否得当、举例和比喻是否恰当等。在本书的结构和内容的考量上,我和策划编辑也反复进行了讨论。在工作忙碌之余,坚持写技术博客,同时又花费不少时间来编排图书内容,着实是一件很辛苦的事情,但我还是坚持了下来,想到读者能够在我的一些案例中得到启示和帮助,实在是一件很让人欣喜的事情。
当然书的内容质量离不开朋友们的支持,感谢李文斌、张善友、邹锭、孙夏、周尹、代瓒、张极贵对于部分书稿的审阅,他们是奋斗在一线的容器专家或者技术管理者,在工作中积累了大量的实践经验,对本书提出了很多宝贵的建议;感谢长沙互联网技术社区和腾讯云对于本书的支持;感谢心莱科技的同事们在我写作期间给予的支持和理解。
完成本书也离不开家庭的大力支持,感谢妻子阳帅给予支持和理解,为此她承担了更多家庭事务;感谢父母默默地支持我的想法,虽然他们看不懂我写的内容,但是总是会询问写书的进度。
由于本人知识水平有限,书中难免存在一些不妥之处,敬请大家批评指正。如果你有更多的宝贵意见,也欢迎在我的微信公众号(麦扣聊技术)讨论交流,希望大家一起学习,共同进步。

李文强
2019年11月

上架指导

计算机\程序设计

封底文字

本书兼具基础知识、实践和工作流程


本书内容
第1~7章 主要介绍Docker相关内容,从发展简史到基础概念,从市场趋势、应用场景到各环境的安装,从基础操作命令到Docker应用持续开发的工作流程,从主流的编程语言实践到数据库容器化。
第8~10章 主要讲解Kubernetes的相关内容,从主体架构、核心概念到开发、生产环境搭建以及集群故障处理,从应用部署、伸缩、回滚到应用访问,从云端理念到将应用部署到容器云服务。
第11章 主要讲解容器化之后的DevOps实践,从DevOps的理念到CI/CD的流程和实践,最后讲述如何使用Azure DevOps、Tencent Hub以及自建的TeamCity来完成CI/CD,并附有相关参考流程。

读者对象
本书可作为初学者学习和实践的参考书,也可作为实际工作中技术人员学习和使用的参考书。

图书目录

前言
第1章 走进Docker 1
1.1 主流的互联网公司均在使用Docker 1
1.2 什么是Docker 4
1.3 容器简史 4
1.4 打消偏见,迎接Docker 5
1.5 Docker和虚拟机 6
1.6 Docker的三个基本概念 8
1.6.1 镜像:一个特殊的文件系统 8
1.6.2 容器:镜像运行时的实体 9
1.6.3 仓库:集中存放镜像文件的地方 9
1.7 Docker版本概述 11
第2章 Docker的市场趋势和主要应用场景 12
2.1 Docker的市场趋势 12
2.2 Docker的主要应用场景 15
2.2.1 简化配置,无须处理复杂的环境依赖关系 15
2.2.2 搭建轻量、私有的PaaS环境、标准化开发、测试和生产环境 15
2.2.3 简化和标准化代码流水线,助力敏捷开发和DevOps实践 16
2.2.4 隔离应用 17
2.2.5 整合服务器资源 17
2.2.6 现代应用 17
2.2.7 调试能力 18
2.2.8 快速部署 18
2.2.9 混合云应用、跨环境应用、可移植应用 18
2.2.10 物联网和边缘计算 18
第3章 安装和运行 20
3.1 Windows 10下的安装 20
3.1.1 配置Docker本地环境 22
3.1.2 运行一个简单的demo 23
3.2 Ubuntu下的安装 25
3.2.1 了解Ubuntu 25
3.2.2 使用Hyper-V快速安装Ubuntu 25
3.2.3 配置外网 27
3.2.4 使用SSH远程Ubuntu 30
3.2.5 安装Docker 33
3.3 CentOS 下的安装 37
3.3.1 了解CentOS 37
3.3.2 使用CentOS 7 安装Docker 38
3.4 基于树莓派搭建个人网盘 41
3.4.1 什么是树莓派 41
3.4.2 开启SSH 43
3.4.3 安装Docker 44
3.4.4 基于树莓派的一行命令搭建个人网盘 46
第4章 Docker命令基础知识 48
4.1 登 录 49
4.1.1 OPTIONS说明 49
4.1.2 登录Docker Hub 49
4.1.3 登录到腾讯云镜像仓库 50
4.2 拉取镜像 51
4.2.1 OPTIONS说明 51
4.2.2 从Docker Hub拉取镜像 51
4.2.3 从腾讯云镜像仓库拉取镜像 52
4.3 列出本地镜像 53
4.3.1 OPTIONS说明 53
4.3.2 按名称和标签列出镜像 54
4.3.3 筛选 55
4.4 运行镜像 58
4.4.1 OPTIONS说明 58
4.4.2 简单运行 60
4.5 列出容器 61
4.5.1 OPTIONS说明 61
4.5.2 查看正在运行的容器 61
4.5.3 显示正在运行和已停止的容器 61
4.5.4 筛选 62
4.5.5 根据指定模板输出 62
4.6 查看镜像详情 63
4.7 删除镜像 64
4.7.1 OPTIONS说明 64
4.7.2 批量删除 65
4.8 清理未使用的镜像 65
4.9 磁盘占用分析 67
4.10 删除容器 68
4.10.1 OPTIONS说明 68
4.10.2 停止容器再删除 68
4.10.3 强制删除正在运行的容器 69
4.10.4 删除所有已停止的容器 69
4.11 镜像构建 70
4.11.1 OPTIONS说明 70
4.11.2 简单构建 71
4.12 镜像历史 73
4.12.1 OPTIONS说明 73
4.12.2 查看镜像历史 74
4.12.3 格式化输出 74
4.13 修改镜像名称和标签 75
4.14 镜像推送 76
4.14.1 推送到Docker Hub 76
4.14.2 推送到腾讯云镜像仓库 77
4.15 使用Kitematic来管理Docker容器 77
第5章 Docker持续开发工作流 81
5.1 基于Docker容器的内部循环开发工作流 81
5.1.1 开发 82
5.1.2 编写Dockerfile 83
5.1.3 创建自定义镜像 90
5.1.4 定义docker-compose 91
5.1.5 启动Docker应用 97
5.1.6 测试 99
5.1.7 部署或继续开发 100
5.2 Visual Studio和Docker 100
5.2.1 使用VS自动生成工程的Dockerfile文件 101
5.2.2 VS支持的容器业务协调程序 102
5.2.3 使用VS发布镜像 104
5.3 使用 Visual Studio Code玩转Docker 105
5.3.1 官方扩展插件Docker 105
5.3.2 Docker Compose扩展插件 109
第6章 Docker应用开发之旅 111
6.1 使用.NET Core开发云原生应用 111
6.1.1 什么是“云原生” 112
6.1.2 .NET Core简介 112
6.1.3 官方镜像 114
6.1.4 Kestrel 115
6.1.5 按环境加载配置 118
6.1.6 查看和设置容器的环境变量 119
6.1.7 ASP.NET Core内置的日志记录提供程序 121
6.1.8 编写一个简单的Demo输出日志 122
6.1.9 使用“docker logs”查看容器日志 124
6.1.10 使用“docker stats”查看容器资源使用 125
6.1.11 如何解决容器应用的时区问题 125
6.2 使用Docker搭建Java开发环境 127
6.2.1 官方镜像 127
6.2.2 使用Docker搭建Java开发环境 127
6.2.3 Docker资源限制 130
6.2.4 防止Java容器应用被杀 130
6.3 使用Go推送钉钉消息 131
6.3.1 Go的优势 131
6.3.2 官方镜像 132
6.3.3 使用Go推送钉钉消息 133
6.4 使用Python实现简单爬虫 140
6.4.1 关于Python 140
6.4.2 官方镜像 140
6.4.3 使用Python抓取博客列表 141
6.5 使用PHP搭建个人博客站点 145
6.5.1 官方镜像 146
6.5.2 编写简单的“Hello world” 146
6.5.3 使用WordPress镜像搭建个人博客站点 148
6.5.4 修改PHP的文件上传大小限制 151
6.6 使用Node.js搭建团队技术文档站点 151
6.6.1 官方镜像 152
6.6.2 编写一个简单的Web服务器 152
6.6.3 使用Hexo搭建团队技术文档站点 154
第7章 数据库容器化 161
7.1 什么是数据库 161
7.2 关系型数据库和非关系型数据库对比 162
7.3 主流的数据库 162
7.4 数据库容器化 163
7.5 SQL Server容器化 163
7.5.1 镜像说明 164
7.5.2 运行SQL Server 容器镜像 165
7.5.3 管理SQL Server 168
7.6 如何持久保存数据 174
7.6.1 方式一:使用主机目录 175
7.6.2 方式二:使用数据卷 178
7.7 MongoDB容器化 179
7.7.1 适用场景 179
7.7.2 不适用场景 180
7.7.3 镜像说明 180
7.7.4 运行MongoDB容器镜像 180
7.7.5 管理MongoDB 181
7.8 Redis容器化 184
7.8.1 优势 184
7.8.2 运行Redis镜像 185
7.8.3 使用redis-cli 185
7.8.4 使用Redis Desktop Manager管理Redis 186
7.8.5 既好又快地实现排行榜 187
7.9 MySQL容器化 191
7.9.1 镜像说明 191
7.9.2 运行MySQL容器镜像 192
7.9.3 管理MySQL 194
第8章 搭建Kubernetes集群 198
8.1 Docker+ Kubernetes已成为云计算的主流 198
8.1.1 什么是Kubernetes 198
8.1.2 Kubernetes正在塑造应用程序开发和管理的未来 199
8.2 Kubernetes主体架构 199
8.2.1 主要核心组件 200
8.2.2 基本概念 202
8.3 使用Minikube部署本地Kubernetes集群 208
8.3.1 什么是Kubernetes集群 208
8.3.2 使用Minikube创建本地Kubernetes实验环境 209
8.4 使用kubectl管理Kubernetes集群 217
8.4.1 概述 217
8.4.2 语法 217
8.4.3 主要命令说明 218
8.4.4 资源类型说明 220
8.4.5 命令标志说明 221
8.4.6 格式化输出 221
8.5 使用kubeadm创建集群 222
8.5.1 kubeadm概述 222
8.5.2 kubelet概述 223
8.5.3 定义集群部署目标和规划 223
8.5.4 开始部署 224
8.5.5 主节点部署 229
8.5.6 工作节点部署 237
8.5.7 安装仪表盘 239
8.6 集群故障处理 243
8.6.1 健康状态检查——初诊 244
8.6.2 进一步诊断分析——听诊三板斧 247
8.6.3 容器调测 252
8.6.4 对症下药 254
8.6.5 部分常见问题处理 255
8.6.6 小结 260
第9章 将应用部署到Kubernetes集群 261
9.1 使用kubectl部署应用 261
9.1.1 kubectl部署流程 261
9.1.2 部署一个简单的Demo网站 262
9.2 应用伸缩和回滚 264
9.2.1 使用“kubectl scale”命令来伸缩应用 264
9.2.2 使用“kubectl autoscale”命令来自动伸缩应用 265
9.2.3 使用“kubectl run”命令快速运行应用 265
9.2.4 使用“kubectl set”命令更新应用 266
9.2.5 使用“kubectl rollout”命令回滚应用 268
9.3 通过Service访问应用 269
9.3.1 通过Pod IP访问应用 269
9.3.2 通过ClusterIP Service在集群内部访问 270
9.3.3 通过NodePort Service在外部访问集群应用 272
9.3.4 通过LoadBalancer Service在外部访问集群应用 274
9.3.5 Microsoft SQL Server数据库实战 276
9.4 使用Ingress负载分发微服务 278
9.4.1 Demo规划 279
9.4.2 准备Demo并完成部署 279
9.4.3 创建部署资源 280
9.4.4 创建服务资源 282
9.4.5 创建Ingress资源并配置转发规则 283
9.5 利用Helm简化Kubernetes应用部署 286
9.5.1 Helm基础 287
9.5.2 安装Helm 287
9.5.3 使用Visual Studio 2019为Helm编写一个简单的应用 289
9.5.4 定义charts 293
9.5.5 使用Helm部署Demo 296
9.5.6 Helm常用操作命令 301
第10章 将应用托管到云端 303
10.1 什么是云计算 303
10.1.1 为什么要上云 304
10.1.2 云计算的三种部署方式 305
10.1.3 云服务的类型 305
10.2 Docker+k8s是上云的不二选择 306
10.2.1 上云的问题 306
10.2.2 利用Docker+k8s解决传统应用上云问题 306
10.3 主流云计算容器服务介绍 307
10.3.1 亚马逊AWS 307
10.3.2 微软Azure 308
10.3.3 阿里云 310
10.3.4 腾讯云 311
10.4 自建还是托管 312
10.4.1 自建容器服务存在的问题 312
10.4.2 云端容器服务的优势 313
10.5 一般应用服务部署流程 313
10.5.1 创建集群和节点 314
10.5.2 创建命名空间和镜像 314
10.5.3 创建服务 317
10.5.4 配置镜像触发器 323
10.5.5 推送镜像 324
10.6 如何节约云端成本 325
10.6.1 无须过度购买配置,尽量使用自动扩展 325
10.6.2 最大化地利用服务器资源 325
10.6.3 使用Ingress节约负载均衡资源 326
10.6.4 使用NFS盘节约存储成本 327
10.7 问题处理 327
10.7.1 镜像拉取问题 327
10.7.2 绑定云硬盘之后Pod的调度问题 329
10.7.3 远程登录 329
10.7.4 利用日志来排查问题 330
第11章 容器化后DevOps之旅 332
11.1 DevOps基础知识 332
11.1.1 什么是DevOps 332
11.1.2 为什么需要DevOps 333
11.1.3 DevOps对应用程序发布的影响 335
11.1.4 如何实施DevOps 335
11.2 Docker与持续集成和持续部署 336
11.2.1 Docker与持续集成和持续部署 336
11.2.2 参考流程 338
11.3 使用Azure DevOps完成CI/CD 340
11.3.1 适用于容器的CI/CD流程 341
11.3.2 使用Azure DevOps配置一个简单的CI/CD流程 341
11.4 使用Tencent Hub完成CI/CD 347
11.4.1 关于Tencent Hub 347
11.4.2 使用Tencent Hub配置一个简单的CI流程 348
11.4.3 直接使用容器服务的镜像构建功能 360
11.5 使用内部管理工具完成CI/CD流程 361
11.5.1 一个简单的CI/CD流程 361
11.5.2 关于TeamCity 361
11.5.3 运行TeamCity Server 363
11.5.4 运行TeamCity Agent 364
11.5.5 连接和配置Agent 366
11.5.6 创建项目以及配置CI 367
11.5.7 使用Jenkins完成CI/CD 372

教学资源推荐
作者: 应明生(Mingsheng Ying) 著
作者: [法]吕克·若兰(Luc Jaulin) 著
作者: (美)Thomas Pittman(阿肯色大学)  James Peters(阿肯色大学) 著
参考读物推荐
作者: 寇圆圆 孙玲延 孙迪 等编著
作者: 林锐 李江博 黄曙江 著