随着云计算和容器技术的发展,Docker与Kubernetes已经成为各个企业首选的部署工具,使用它们可以提高系统的部署效率和运维能力,降低运维成本。本书是一本为初学者量身定制的Docker与Kubernetes容器技术入门书,要求读者具有Linux基础。
本书共22章,第1~11章主要内容包括全面认识Docker、初步体验Docker、Docker基本管理、Docker仓库、Docker数据管理、Dockerfile、Docker日志、Docker Compose、Docker Swarm、Docker Portainer、Docker 实战应用;第12~22章主要内容包括Kubernetes初步入门、安装Kubernetes、Kubernetes命令行工具、运行应用、通过服务访问应用、存储管理、Kubernetes软件包管理、Kubernetes网络管理、Kubernetes Dashboard、Kubernetes安全、Kubernetes集群管理。
本书内容详尽、示例丰富,是广大Docker与Kubernetes入门读者的参考书,同时也非常适合作为高等院校或高职、高专计算机及相关专业的教材使用。
本书分两部分系统介绍Docker与Kubernetes的运维技术。
(1)Docker部分包括:全面认识Docker、初步体验Docker、Docker基本管理、Docker仓库、数据管理、Dockerfile、日志、Compose、Swarm、Portainer、Docker 实战应用。
(2)Kubernetes部分包括:Kubernetes初步入门、安装Kubernetes、Kubernetes命令行工具、运行应用、通过服务访问应用、存储管理、软件包管理、网络管理、Kubernetes Dashboard、Kubernetes安全、Kubernetes集群管理。
前言
你是否还在一台一台地安装服务器部署环境
项目要求快速上线并且部署多台服务器环境时,需要一台一台服务器执行yuminstall、vim、restart等命令。这时如果有一个U盘,能把整个环境直接复制到每一台服务器上,那该多好啊。Docker就是那个U盘。
云平台都在使用容器,并且提供完整的容器运维平台环境。
国内外知名的云服务商都提供了容器以及容器运维平台,基本上可以做到少量配置、一键上线的效果。
拥有多个容器,并且这些容器可能跨越多个服务器主机,如何管理它们?
Kubernetes为那些需要大规模部署容器的工作负载提供了编排与管理能力。Kubernetes编排让用户能够构建多容器的应用服务,在集群上调度或伸缩这些容器,以及管理它们随时间变化的健康状态。
本书是否适合你
本书帮你进入云服务时代,掌握Docker和Kubernetes相关知识。第1~11章介绍Docker,读者可以从这几章内容中快速地掌握Docker相关知识。第12~22章介绍Kubernetes,尽管Kubernetes的知识点非常多,但是作为一本入门书,本书精心组织相关知识点,提纲挈领地介绍Kubernetes中必须掌握的重要知识点。
本书特点
(1)讲解细致,分析透彻。不论是理论知识的介绍,还是实例的开发,本书都是从实际应用角度出发,精心选择开发中的典型例子,使读者快速掌握。
(2)深入浅出,轻松易学。以实例为主线,激发读者的阅读兴趣,让读者能够真正学习到Docker和Kubernetes最实用、最前沿的技术。
(3)技术新颖,与时俱进。结合时下热门的技术,了解并熟识更多相关领域的先进技术。
(4)贴近读者,贴近实际。大量成熟案例的使用和说明,帮助读者快速找到问题的最优解决方案,书中很多实例来自作者工作的实际环境。
(5)贴心提醒,提示要点。本书根据需要在各章使用了注意说明等小提示,让读者可以在学习过程中更轻松地理解相关知识点及概念。
示例源码和课件下载
本书配套的示例源码和课件需要用微信扫描下边二维码获取。
本书读者
- Docker与Kubernetes初学者
- 运维工程师
- 前端开发人员
- 后端开发人员
- 快速部署研发、测试、生产环境的IT人员
- 对容器和容器管理有兴趣的高校学生
作者
2023年5月
王启明,平顶山学院副教授,郑州大学计算机科学与技术学士,西安电子科技大学计算机技术硕士。本人主要从事人工智能、智能物联网、计算机视觉等方面的研究。著有《Python 3.7网络爬虫快速入门》《Python 3.6零基础入门与实战》。
肖志健,南京理工大学计算机科学与技术学士。2011年开始专注于Linux,从事过一线研发工程师、大学讲师、创业公司产品与技术总监等工作。目前专注于Linux研发和团队管理。著有《Red Hat Enterprise Linux 9系统管理实战》。
目录
第1章全面认识Docker 1
1.1容器技术 1
1.1.1什么是容器 2
1.1.2容器与虚拟机之间的区别 3
1.1.3容器究竟解决了什么问题 4
1.1.4容器的优点 5
1.1.5容器的缺点 5
1.1.6容器的分类 6
1.2Docker技术 7
1.2.1什么是Docker 7
1.2.2Docker的由来 8
1.2.3Docker究竟是什么 8
1.3Docker的架构与组成 9
1.3.1Docker的架构 9
1.3.2Docker中应用系统的存在
形式 11
1.4为什么使用Docker 11
1.4.1Docker的应用场景 11
1.4.2Docker可以解决哪些问题 12
1.4.3Docker的应用成本 12
1.5Docker和Podman 12
1.5.1Podman 13
1.5.2Docker和Podman的比较 13
第2章初步体验Docker 15
2.1在Windows中安装Docker 15
2.1.1通过Boot2Docker
体验Docker 15
2.1.2通过DockerDesktop
体验Docker 21
2.1.3搭建第一个Docker应用:
Helloworld 28
2.2在Ubuntu中安装Docker 30
2.2.1通过Ubuntu仓库
安装Docker 30
2.2.2通过Docker仓库
安装Docker 32
2.2.3通过软件包安装Docker 33
2.2.4测试安装的结果 33
第3章Docker基本管理 35
3.1镜像管理 35
3.1.1查找镜像 35
3.1.2下载镜像 36
3.1.3列出本地镜像 37
3.1.4删除镜像 37
3.1.5查看镜像 37
3.1.6构建镜像 40
3.1.7镜像标签管理 42
3.2容器管理 43
3.2.1创建容器 43
3.2.2查看容器 45
3.2.3启动容器 46
3.2.4停止容器 46
3.2.5删除容器 47
3.3网络管理 47
3.3.1Docker网络原理 47
3.3.2网络模式 49
3.3.3Docker容器的互联 50
3.3.4容器与外部网络的互联 52
第4章Docker的仓库 54
4.1公共镜像市场 54
4.1.1什么是DockerHub 54
4.1.2DockerHub的特点 54
4.1.3使用DockerHub 55
4.2第三方镜像市场 57
4.2.1公有镜像中心(加速器) 57
4.2.2私有镜像中心 58
4.3私有仓库 59
4.3.1创建私有仓库 59
4.3.2使用私有仓库 60
第5章Docker数据管理 63
5.1数据卷 63
5.1.1什么是数据卷 63
5.1.2创建数据卷 64
5.1.3不同类型的数据卷 64
5.2数据卷容器 67
5.2.1新建数据卷容器 67
5.2.2共享数据卷容器 67
5.3数据迁移 67
5.3.1备份 68
5.3.2恢复 68
第6章Dockerfile 69
6.1文件结构说明 69
6.1.1Dockfile的简单格式 69
6.1.2提示解释器 70
6.1.3环境变量替换 71
6.2指令简介 71
6.2.1FROM 72
6.2.2ARG 72
6.2.3RUN 73
6.2.4CMD 77
6.2.5LABEL 78
6.2.6EXPOSE 79
6.2.7ENV 79
6.2.8ADD 80
6.2.9COPY 81
6.2.10ENTRYPOINT 81
6.2.11VOLUME 86
6.2.12USER 87
6.2.13WORKDIR 87
6.2.14ONBUILD 88
6.2.15STOPSIGNAL 89
6.2.16HEALTHCHECK 89
6.2.17SHELL 90
6.3创建镜像 92
6.3.1命令详解 92
6.3.2.dockerignore文件 92
6.3.3最佳实践 93
第7章Docker日志 98
7.1dockerlogs 98
7.2loggingdriver 99
7.3ELK 100
7.3.1概述 101
7.3.2安装ELK 101
7.3.3Filebeat配置 103
7.3.4Kibana配置 105
第8章DockerCompose 107
8.1简介 107
8.1.1主要功能 108
8.1.2常见用例 108
8.2安装Compose 109
8.2.1DockerDesktop 109
8.2.2安装ComposePlugin 109
8.2.3独立安装Compose 110
8.3使用Compose部署 110
8.3.1先决条件 111
8.3.2步骤1:定义应用程序
依赖项 111
8.3.3步骤2:创建Dockerfile 112
8.3.4步骤3:在撰写文件中定义
服务 112
8.3.5步骤4:使用Compose生成并
运行应用 113
8.3.6步骤5:编辑Compose文件以
添加Volume 114
8.3.7步骤6:使用Compose重新
生成并运行应用 114
8.3.8步骤7:更新应用程序 115
8.3.9步骤8:尝试使用其他命令 115
8.4使用Compose命令 116
第9章DockerSwarm 118
9.1基本概念 118
9.1.1简介 118
9.1.2关键概念 120
9.2使用Swarm 121
9.2.1创建Swarm 121
9.2.2添加Swarm节点 122
9.3使用服务命令 123
9.3.1部署一个服务 123
9.3.2查看服务 124
9.3.3扩展服务 124
9.3.4删除服务 125
9.3.5应用滚动更新 126
第10章DockerPortainer 129
10.1简介 129
10.2安装 130
10.3常规操作 132
10.3.1App模板 132
10.3.2镜像操作 133
10.3.3容器操作 134
10.3.4添加Docker镜像仓库 136
第11章Docker实战应用 138
11.1OSDocker 138
11.1.1BusyBox 138
11.1.2Alphine 139
11.1.3Ubuntu 139
11.1.4CentOS 139
11.2Web服务应用 140
11.2.1Apache 140
11.2.2Nginx 140
11.3数据库应用 141
11.3.1MySQL 141
11.3.2Redis 142
11.3.3MongoDB 142
11.4编程应用 143
11.4.1Java 143
11.4.2Python 143
第12章Kubernetes初步入门 145
12.1Kubernetes技术 145
12.1.1什么是Kubernetes 145
12.1.2Kubernetes的发展历史 145
12.1.3为什么使用Kubernetes 146
12.2Kubernetes的重要概念 147
12.2.1Cluster(集群) 147
12.2.2Master(控制节点) 147
12.2.3Node(工作节点) 148
12.2.4Pod 149
12.2.5服务 149
12.2.6卷 150
12.2.7命名空间 150
第13章安装Kubernetes 151
13.1通过软件包管理工具安装
Kubernetes 151
13.1.1软件包管理工具 151
13.1.2节点规划 152
13.1.3安装前准备 153
13.1.4Etcd集群配置 153
13.1.5Master节点的配置 158
13.1.6Node节点的配置 160
13.1.7配置网络 162
13.2Kubeadm的使用方法 163
13.2.1Kubeadm的安装方法 164
13.2.2Kubeadm的基本语法 165
13.2.3基础OS环境部署 165
13.2.4部署Master节点 167
13.2.5部署Node节点 167
13.2.6部署CNI网络 168
13.2.7重置节点 168
第14章Kubernetes命令行工具 169
14.1kubectl用法概述 169
14.2kubectl的子命令 171
14.3Kubernetes资源对象类型 173
14.4kubectl的输出格式 173
14.5kubectl命令举例 174
第15章运行应用 178
15.1Deployment 178
15.1.1什么是Deployment 178
15.1.2Deployment与ReplicaSet 179
15.1.3运行Deployment 179
15.1.4使用配置文件 185
15.1.5扩容和缩容 189
15.1.6故障转移 191
15.1.7通过标签控制Pod的位置 193
15.1.8删除Deployment 195
15.1.9DaemonSet 195
15.2Job 197
15.2.1什么是Job 197
15.2.2Job失败处理 199
15.2.3Job的并行执行 200
15.2.4Job的定时执行 201
第16章通过服务访问应用 203
16.1服务及其功能 203
16.1.1服务的基本概念 203
16.1.2服务的功能原理 204
16.2管理服务 205
16.2.1创建服务 205
16.2.2查看服务 207
16.2.3删除服务 208
16.3外部网络访问服务 209
16.3.1kube-proxy结合ClusterIP 209
16.3.2通过NodePort访问服务 210
16.3.3通过负载均衡访问服务 212
16.4通过CoreDNS访问应用 212
16.4.1CoreDNS简介 213
16.4.2安装CoreDNS 213
第17章存储管理 220
17.1存储卷 220
17.1.1什么是存储卷 220
17.1.2emptyDir卷 221
17.1.3hostPath卷 224
17.1.4NFS卷 224
17.1.5Secret卷 225
17.1.6iSCSI卷 228
17.2持久化存储卷 229
17.2.1什么是持久化存储卷 229
17.2.2持久化存储卷请求 229
17.2.3持久化存储卷的生命周期 230
17.2.4持久化存储卷静态绑定 231
17.2.5持久化存储卷动态绑定 234
17.2.6回收 238
第18章Kubernetes软件包管理 241
18.1Helm 241
18.1.1Helm相关概念 241
18.1.2Tiller 242
18.1.3Chart 242
18.1.4Repository 242
18.1.5Release 243
18.2安装Helm 243
18.2.1安装客户端 243
18.2.2安装服务器端Tiller 245
18.3Chart文件结构 247
18.4使用Helm 247
18.4.1软件仓库的管理 248
18.4.2查找Chart 248
18.4.3安装Chart 250
18.4.4查看已安装的Chart 252
18.4.5删除Release 253
第19章Kubernetes网络管理 254
19.1Kubernetes网络基础 254
19.1.1Kubernetes网络模型 254
19.1.2命名空间 255
19.1.3veth网络接口 255
19.1.4netfilter/iptables 256
19.1.5网桥 256
19.1.6路由 256
19.2Kubernetes网络实现 257
19.2.1Docker与Kubernetes网络比较 257
19.2.2容器之间的通信 261
19.2.3Pod之间的通信 262
19.2.4Pod和服务之间的通信 265
19.3Flannel 272
19.3.1Flannel简介 272
19.3.2安装Flannel 273
第20章KubernetesDashboard 278
20.1KubernetesDashboard配置文件 278
20.1.1Kubernetes角色控制 278
20.1.2kubernetes-dashboard.yaml 279
20.2安装KubernetesDashboard 284
20.2.1官方安装方法 284
20.2.2自定义安装方法 284
20.3Dashboard的使用方法 287
20.3.1Dashboard概况 287
20.3.2通过Dashboard创建资源 289
第21章Kubernetes安全 290
21.1在集群级别应用Pod安全标准 290
21.1.1正确选择要应用的Pod安全标准 290
21.1.2设置模式、版本和标准 292
21.1.3清理 295
21.2在命名空间级别应用Pod 295
21.2.1创建集群 295
21.2.2为命名空间启用Pod安全标准检查 296
21.2.3验证Pod安全标准 296
21.2.4清理 297
21.3使用AppArmor限制容器对资源的访问 297
21.3.1环境准备 297
21.3.2保护Pod 298
21.4使用Seccomp限制容器对资源的访问 299
21.4.1下载Seccomp配置文件示例 299
21.4.2使用Kind创建本地Kubernetes集群 299
21.4.3使用RuntimeDefault做负载均衡 300
21.4.4创建使用容器运行时默认Seccomp配置文件的Pod 302
21.4.5使用Seccomp配置文件创建
Pod以进行系统调用审计 302
第22章Kubernetes集群管理 305
22.1资源管理 305
22.1.1组织资源配置 305
22.1.2kubectl中的批量操作 306
22.1.3有效地使用标签 308
22.1.4多标签部署 309
22.1.5更新标签 310
22.1.6更新注解 310
22.1.7扩展应用 310
22.1.8就地更新资源 311
22.1.9破坏性地更新 312
22.1.10在不中断服务的情况下更新应用 312
22.2日志架构 312
22.2.1Pod和容器日志 313
22.2.2集群日志架构 314
22.3系统组件指标 320
22.3.1Kubernetes中组件的指标 320
22.3.2指标生命周期 321
22.3.3显示隐藏指标 321
22.3.4禁用加速器指标 322
22.3.5组件指标 322
22.4系统日志 323
22.4.1KLog 323
22.4.2KLog输出 324
写在最后 325