网站
更多书籍点击进入>> CiCi岛
下载
电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍
- 电子书下载(皮皮云盘-点击“普通下载”)
- 购买正版
封页
编辑推荐
适合不同开发者的Docker工具书! 内容全面:基础命令、进阶用法悉数囊括,知识点全覆盖。 活学活用:大量实践案例展示,指导上手使用,深化理解。 知识新鲜:以*文档、材料为基础,跟进Docker演进的步伐。
内容简介
作为引领近几年容器虚拟化领域的技术,Docker的发展方兴未艾。但由于其出现不过数年,关于它的资料,特别是中文资料仍然相对匮乏,导致国内许多开发者对其感到陌生。本书正是以布道Docker为理念,由浅入深地从阐述Docker的基本概念、讲解常规使用方法、进行操作实践的演示、展示提高和进阶用法、剖析内部原理和底层架构等多个方面,全方面的展现Docker所具有的魅力。本书由概念及至实践,从不同方面向读者展现了Docker,实用性非常强,既可以作为一本学习Docker的入门教材,也能作为进行Docker操作实践的说明书,甚至可以作为提高和进阶的知识宝库。不论是对Docker认知程度不同,有着不同知识储备的人,还是处于程序软件研发部署流程中的开发人员、测试人员或运维人员,本书都有着很强的可阅读性。
作者简介
熊昌隆,资深架构师,Web全栈开发者,知名博主,Beaver框架作者,开源小组Funcuter的发起者,致力于新兴技术的研究和推广。早年参与智慧路由的研究,多项研究成果影响了家用路由器的发展。设计实现的Beaver框架,已经应用于千万级系统的底层程序架构中。发起组建的Funcuter开源小组,旨在聚集国内的优秀开源项目和开发者,目前已经拥有多个开源项目。近年来一直致力于前沿技术的研究和推广,希望让更多的开发者更轻松的接触、了解*兴科技成果,并应用于开发实践中。
目 录
目 录
第一部分 基础篇
第1章 初识Docker 1
1.1 虚拟化 2
1.1.1 虚拟化技术 2
1.1.2 虚拟化的分类 4
1.2 容器技术与Docker 6
1.2.1 容器技术 6
1.2.2 Docker简介 8
1.2.3 改变世界的发明 10
1.3 Docker的安装 10
1.3.1 在Ubuntu中安装Docker 11
1.3.2 在CentOS中安装Docker 12
1.3.3 在Windows中安装Docker 13
1.3.4 在Mac OS中安装Docker 15
1.3.5 在其他系统中安装Docker 16
1.4 Docker的优势 17
1.4.1 革命性的虚拟化方案 17
1.4.2 高效的容器技术 18
1.4.3 社区的力量 19
1.5 Docker的应用场景 20
1.5.1 超短时间部署运行 20
1.5.2 节约迁移时间 21
1.6 本章小结 21
第2章 镜像与仓库 22
2.1 镜像的概念 22
2.1.1 联合文件系统 22
2.1.2 Docker中的镜像 23
2.1.3 镜像的分层结构 24
2.1.4 镜像的写时复制 25
2.2 使用和管理镜像 26
2.2.1 获取镜像 26
2.2.2 列出镜像 28
2.2.3 获得镜像的详细信息 28
2.2.4 删除镜像 31
2.2.5 镜像的迁移 32
2.3 Docker Hub 33
2.3.1 镜像仓库 33
2.3.2 Docker Hub 34
2.3.3 注册Docker Hub账号 35
2.3.4 搜索镜像 36
2.3.5 共享自动构建镜像 38
2.4 搭建私有仓库 40
2.4.1 镜像分发服务 40
2.4.2 Docker Registry HTTP API 41
2.4.3 部署私有仓库 42
2.5 本章小结 44
第3章 管理和使用容器 45
3.1 管理容器 45
3.1.1 创建容器 45
3.1.2 容器的启动过程 48
3.1.3 列出容器 49
3.1.4 容器的命名 51
3.1.5 启动和停止 52
3.1.6 暂停和恢复 53
3.1.7 重启容器 54
3.1.8 删除容器 55
3.2 连接到容器 55
3.2.1 查看进程信息 56
3.2.2 查看容器信息 56
3.2.3 容器日志 62
3.2.4 衔接到容器 63
3.2.5 在容器中执行命令 64
3.3 容器的保存与迁移 65
3.3.1 提交容器更改 65
3.3.2 容器的导入/导出 68
3.4 本章小结 70
第4章 数据卷与网络 71
4.1 数据卷 71
4.1.1 关于数据卷 71
4.1.2 数据卷的特点 72
4.1.3 创建数据卷 73
4.1.4 挂载数据卷 74
4.1.5 删除数据卷 76
4.2 数据卷容器 77
4.2.1 关于数据卷容器 77
4.2.2 创建数据卷容器 78
4.2.3 连接数据卷容器 79
4.2.4 数据卷的迁移 80
4.3 网络基础 82
4.3.1 网络简介 82
4.3.2 查看网络配置 83
4.4 网络访问 85
4.4.1 宿主机端口映射 85
4.4.2 容器连接 87
4.5 本章小结 90
第5章 制作镜像 91
5.1 了解Dockerfile 91
5.1.1 Dockerfile简介 92
5.1.2 使用Dockerfile创建镜像 94
5.2 基础指令 96
5.2.1 FROM 97
5.2.2 MAINTAINER 97
5.3 控制指令 97
5.3.1 RUN 97
5.3.2 WORKDIR 99
5.3.3 ONBUILD 99
5.4 引入指令 100
5.4.1 ADD 100
5.4.2 COPY 102
5.5 执行指令 102
5.5.1 CMD 102
5.5.2 ENTRYPOINT 104
5.6 配置指令 107
5.6.1 EXPOSE 108
5.6.2 ENV 108
5.6.3 LABEL 109
5.6.4 USER 110
5.6.5 ARG 111
5.6.6 STOPSIGNAL 112
5.6.7 SHELL 113
5.7 特殊用法 113
5.7.1 环境变量 113
5.7.2 指令解析 114
5.7.3 忽略文件 116
5.8 本章小结 117
第二部分 实践篇
第6章 SSH服务 118
6.1 在Docker中使用SSH 118
6.1.1 SSH简介 119
6.1.2 SSH使用方法简介 119
6.1.3 数据卷管理容器 121
6.1.4 使用SSH服务容器 122
6.2 构建SSH服务镜像 124
6.2.1 构建方式比较 124
6.2.2 通过提交构建 125
6.2.3 使用Dockerfile构建 127
6.3 本章小结 131
第7章 Web服务器 132
7.1 Web服务简介 132
7.1.1 万维网与网站 132
7.1.2 Web服务 133
7.1.3 Web服务程序 135
7.2 Apache 135
7.2.1 Apache简介 135
7.2.2 安装Apache 136
7.2.3 构建Apache镜像 139
7.2.4 测试Apache容器 142
7.3 Nginx 143
7.3.1 关于Nginx 143
7.3.2 安装Nginx 144
7.3.3 构建Nginx镜像 146
7.3.4 测试Nginx镜像 148
7.4 Tomcat 148
7.4.1 Tomcat简介 149
7.4.2 安装Tomcat 149
7.4.3 构建Tomcat镜像 152
7.5 本章小结 153
第8章 数据库程序 155
8.1 MySQL 155
8.1.1 MySQL简介 156
8.1.2 安装MySQL 156
8.1.3 构建MySQL镜像 162
8.1.4 测试MySQL容器 164
8.2 MongoDB 166
8.2.1 MongoDB简介 166
8.2.2 安装MongoDB 167
8.2.3 构建MongoDB镜像 171
8.2.4 测试MongoDB容器 173
8.3 本章小结 176
第9章 缓存工具 177
9.1 Memcached 178
9.1.1 Memcached简介 178
9.1.2 安装Memcached 179
9.1.3 构建Memcached镜像 184
9.1.4 测试Memcached容器 186
9.2 Redis 188
9.2.1 Redis简介 188
9.2.2 安装Redis 188
9.2.3 构建Redis镜像 193
9.2.4 测试Redis容器 195
9.3 本章小结 196
第10章 动态处理程序 197
10.1 Java 197
10.1.1 Java简介 198
10.1.2 安装Java 198
10.1.3 构建Java镜像 204
10.1.4 测试Java容器 206
10.2 PHP 207
10.2.1 PHP简介 207
10.2.2 安装PHP 208
10.2.3 构建PHP镜像 214
10.2.4 测试PHP容器 216
10.3 Python 217
10.3.1 Python简介 217
10.3.2 安装Python 218
10.3.3 构建Python镜像 223
10.3.4 测试Python容器 224
10.4 Node.js 225
10.4.1 Node.js简介 225
10.4.2 安装Node.js 226
10.4.3 构建Node.js镜像 228
10.4.4 测试Node.js容器 230
10.5 本章小结 231
第11章 综合演练 232
11.1 演练目标 232
11.1.1 目标概述 232
11.1.2 代码编写 233
11.2 环境搭建 237
11.2.1 准备镜像 237
11.2.2 程序配置 239
11.3 项目运行 248
11.3.1 启动容器 248
11.3.2 测试项目 249
11.4 本章小结 253
第三部分 提高篇
第12章 网络进阶 254
12.1 网络实现 254
12.1.1 容器网络基础 255
12.1.2 网络模型 257
12.2 Docker中的网络 258
12.2.1 默认网络 258
12.2.2 自定义网络 261
12.2.3 容器与外部通信 262
12.2.4 容器间通信 264
12.3 网络实践 265
12.3.1 管理容器网络 265
12.3.2 容器连接网络 267
12.3.3 配置docker0网桥 269
12.3.4 自定义网桥 271
12.3.5 配置DNS 271
12.3.6 使用IPv6 273
12.4 本章小结 274
第13章 安全加固 275
13.1 深入理解Docker安全 275
13.1.1 命名空间隔离 276
13.1.2 资源控制组 277
13.1.3 内核能力机制 277
13.2 资源使用限制 278
13.2.1 通过控制组限制 278
13.2.2 通过ulimit限制 280
13.2.3 网络访问限制 280
13.3 校验与监控 281
13.3.1 镜像签名 281
13.3.2 运行状态监控 283
13.4 联级防护 284
13.4.1 组合虚拟化 284
13.4.2 文件系统安全 284
13.5 内核安全技术 285
13.5.1 Capability 286
13.5.2 SELinux 287
13.5.3 AppArmor 288
13.6 本章小结 289
第14章 Docker API 290
14.1 关于Docker API 290
14.1.1 通用操作接口 290
14.1.2 关于RESTful 291
14.1.3 Docker API的优势 292
14.1.4 Docker API的分类 293
14.2 使用Docker Remote API 293
14.2.1 关于Docker Remote API 294
14.2.2 Docker Remote API的版本 299
14.2.3 通过Remote API列出容器 300
14.2.4 通过Remote API列出镜像 302
14.3 使用Docker Registry API 303
14.3.1 关于Docker Registry API 304
14.3.2 Docker Registry API的主要功能 304
14.3.3 Docker Registry API的版本 305
14.3.4 通过Registry API拉取镜像 306
14.3.5 通过Registry API推送镜像 307
14.4 本章小结 309
第15章 管理工具 310
15.1 Docker Compose 310
15.1.1 Docker Compose简介 311
15.1.2 安装Docker Compose 313
15.1.3 Docker Compose配置文件 314
15.1.4 常用的Docker Compose命令 315
15.2 Docker Machine 318
15.2.1 Docker Machine简介 318
15.2.2 安装Docker Machine 320
15.2.3 Docker Machine常见命令 321
15.3 Docker Swarm 322
15.3.1 Docker Swarm简介 322
15.3.2 Docker Swarm结构 323
15.3.3 使用Docker Swarm 323
15.3.4 Docker Swarm常见命令 325
15.4 本章小结 327
第16章 Docker的技术架构 328
16.1 命名空间 328
16.1.1 关于Linux命名空间 328
16.1.2 命名空间的系统调用 329
16.1.3 命名空间的分类 330
16.2 控制组 332
16.2.1 关于Linux控制组 332
16.2.2 Cgroups的组成 333
16.2.3 容器与控制组 334
16.3 联合文件系统 336
16.3.1 关于UFS 336
16.3.2 Docker中的UFS 337
16.4 Docker Engine架构 338
16.4.1 Docker Engine的组成结构 338
16.4.2 Docker Daemon 339
16.4.3 Docker CLI 342
16.5 本章小结 344
前 言
前 言
在快速发展的互联网领域,总在涌现引领潮流的新技术,最近几年,Docker就成为了这些技术中的一员。Docker作为近几年备受关注的程序部署方案,实现了程序的快速部署,为分布式等场景下的部署提供了有力的帮助。在云计算以及虚拟化领域,Docker这个诞生不过数年的项目,只能算是新生儿,在功能完整性和稳定性方面,都不及其他已经经受过历史考验的项目。但为何仅仅几年的风光,就让Docker成为了业界公认的优秀项目,关键在于Docker真正解决了分布式部署效率这一行业痛点。Docker所提供的崭新分布式部署方案,不但像其他虚拟化方案一样,大幅减低了部署过程中适配环境所带来的额外工作,还充分弱化了虚拟化程序在虚拟化过程中对性能的影响,使得在Docker中运行的程序的效率能够与直接运行在真实操作系统中的程序的效率相媲美。
不过Docker能够受到各界追捧的原因并不仅仅在于其在部署领域带来的变化,其受到赞誉的原因也在于它能够打通开发、测试、运维等多个环节,为整个项目的开发流程营造统一的运行环境。由于Docker提供了非常轻量级的容器虚拟化方案,使得Docker能够以非常低的消耗运行在系统中。这也就使得我们不仅可以使用Docker在服务器中部署程序,也能在开发过程中利用Docker在本地系统中搭建程序运行环境。
由于Docker诞生不过数年,并且发展和迭代的速度非常快,所以其相关的教学资料比较匮乏,特别是中文文献,相对其他发展数十年的技术来说,简直是上少之又少。本书正是建立在帮助希望了解和使用Docker的读者的基础上,收集了与Docker相关的资料,特别是缺少中文翻译的外文资料,集合整理成文,并与相关的案例、实践组合搭配,给读者提供了解Docker的捷径。
本书由浅及深,从不同维度解读和展现了Docker的概念、原理、使用方法、实践案例以及周边工具,不同岗位的开发者,或者是对Docker有着不同认知的开发者都能从中得到想要的知识。本书虽不能全面地阐述Docker的所有功能与特性,但系统性的知识梳理、理论与实践相结合的方式,都为读者了解和使用Docker提供了有效的帮助和指导。不论你将本书看作Docker的入门教材,还是当成提升Docker知识储备的工具手册,都能为你带来不错的效果。
因受作者水平和成书时间所限,本书难免存有疏漏和不当之处,敬请指正。
本书特色
由浅及深,适合不同知识层面的读者
本书的内容涵盖了Docker的基础概念和常规使用方法,常见服务器程序在Docker中搭建和使用的实践,安全策略和辅助工具等知识概述,由浅入深,循序渐进,为不同的读者准备了不同的知识盛宴。对于Docker中的重点知识,必备、常用的操作方法和策略,本书不惜笔墨,进行了充分甚至反复的阐述和演示。而可供延展的知识点,虽然由于篇幅限制不能详细讲解,也都一一列出,供大家自行查阅,进行延伸阅读。本书的章节脉络清晰明确,使读者能循序渐近地掌握Docker知识,是一本不可多得的Docker资料手册和教材。
通俗易懂,理论与实践结合
本书的行文中穿插了很多对Docker使用方法的展示,并提供了专门的章节演示Docker的实践之道。通过这些操作示例的引导,避免了读者进行纸上谈兵式的阅读,也使得章节之间的知识可以由这些演示串联起来,能够减少知识脱节的现象发生。而对于理论知识的说明,本书绝不是生搬硬套地进行教条式的列举,也没有以堆砌专有词汇的方式简单概括,而是通过通俗语言将晦涩的知识以生活化的方式展现出来,让读者,特别是Docker初学者更容易地理解Docker。
跟进时代,采取最新资料编写
Docker是一门新兴技术,也是一门快速发展的技术,仅仅诞生数年就已经迭代了数十个版本。由于Docker在迭代的过程中不断地优化、完善、补充,所以不同版本之间所具有的功能和使用方法都存在很大的区别,所以学习Docker一定要使用新鲜的一手资料。本书在编写的过程中,收集和参考了大量最新的材料,特别是从Docker官方文档中提取了很多Docker最新的特性和使用方法,也从Docker的技术说明和源代码中总结了Docker的架构逻辑。由于本书是在对这些崭新的材料的收集汇总以及精心梳理的基础上完成的,所以本书可以为大家学习Docker提供强有力的支持。
本书的内容及体系结构
本书主要分为三部分,分别从基础、实践和提高的角度向读者介绍Docker的知识概念和使用方法。
第一部分为基础篇,包含了第1~5章的内容。在基础篇中,我们会讲解了Docker的历史和基本概念,介绍最常见且最基础的Docker使用方法。
第1章 初始Docker
本章从虚拟化、容器技术的发展历史与现状出发,逐步引入和展示Docker这项全新的虚拟化解决方案。除了向读者介绍Docker的组成结构以及发展历史,我们还将比较Docker与以往的部署及虚拟化方案的不同,分析使用Docker的优势所在,并介绍适合使用Docker的常见场景。另外,我们还将教会大家如何在常用的几种操作系统中安装Docker。
第2章 镜像与仓库
本章由Docker镜像的概念出发,讲解Docker镜像的结构特点与组成形式,比较Docker镜像与其他虚拟化方案中镜像的异同,同时将常用的Docker镜像管理方法介绍给读者。除此之外,我们还将介绍如何使用Docker特有的镜像仓库存储、共享和迁移镜像,以及Docker官方所提供的Docker Hub镜像仓库的使用方法。
第3章 管理和使用容器
本章主要介绍了Docker的核心,也就是容器技术中容器的实现。本章将逐一谈及新增、运行、停止、删除等常用的容器操作方法,也将向读者展示如何查看容器的运行状态以及如何进行到容器中操作。另外,本章也会提及如何进行容器的迁移。
第4章 数据卷与网络
本章从容器的网络数据和文件数据的交换出发,引出和介绍了Docker提供的容器网络和数据卷这两个模块。在有关数据卷的部分,读者可以了解到数据卷的基本概念,以及如何创建或者从宿主机中挂载数据卷。在有关容器网络的部分,读者可以了解到容器网络的基本知识,以及如何让外部网络访问到容器或者实现容器间的网络通信。
第5章 制作镜像
本章主要介绍如何根据需要,通过编写Dockerfile构建Docker镜像。在展示了如何将程序打包到镜像中之后,我们还对Dockerfile的写法以及可能使用到的指令进行了全方位的讲解。
第二部分是实践篇,由第6~11章的内容组成。在实践篇中,我们将以基础篇中所学到的知识,分别对常见的服务器程序在Docker中的使用进行实践。
第6章 SSH服务
本章主要展示了SSH服务在Docker容器中运行的方式,并介绍了SSH服务在Docker中所扮演的角色,还带领读者进行了在Docker容器中搭建SSH服务,以及构建包含SSH服务的Docker镜像的实践。
第7章 Web服务器
本章首先简单介绍了Web服务和能够提供Web服务的常见程序,也分别在Docker容器中搭建了Apache、Nginx和Tomcat这几个常见的Web服务程序,还将通过编写Dockerfile的方式将这几款Web服务程序封装成Docker镜像。
第8章 数据库程序
本章对目前最受欢迎的开源关系型数据库MySQL和非关系型数据库MongoDB做简单介绍,展示如何在Docker容器中使用它们,也会提及如何让这些数据库向外提供服务。我们还将把这几款数据库软件通过Dockerfile构建成镜像,方便在Docker中使用。
第9章 缓存工具
本章首先提及在服务器中使用缓存工具的意义,并介绍Memcached和Redis这两款常用作处理缓存的工具。在了解Memcached和Redis的使用之后,我们还会将它们部署到Docker容器之中,并通过搭建程序的实践,将这两款程序封装到Docker镜像里。
第10章 动态处理程序
本章主要介绍了Java、PHP、Python和Node.js这几款常用的处理Web请求的程序,并讲解了如何在Docker容器中安装或搭建这些程序。在了解了这些程序在容器中安装或搭建的过程之后,我们还将通过Dockerfile将这几款软件封装成独立的Docker镜像。
第11章 综合演练
本章在之前所进行的实践的基础上,将实践过的Web服务程序、数据库程序、缓存工具和动态处理程序,通过运行它们的Docker容器进行组合,讲解如何通过Docker构建和运行一套完整的Web服务体系。
第三部分是提高篇,汇总在第12~16章的内容中。在提高篇中,我们主要针对一些Docker更深入的使用方法和概念、原理进行学习和探究。
第12章 网络进阶
本章在之前所介绍的Docker网络基础概念和使用方法的基础之上,进一步深入地介绍了Docker网络的实现方法,阐述Docker网络的底层架构以及容器网络模型的概念,对用于管理容器网络的命令,也做了专门介绍。另外,本章还向读者介绍了如何进行深度定制的Docker容器网络配置和控制。
第13章 安全加固
本章从Docker的底层隔离机制出发,阐述了隔离机制是如何保证容器中程序互不干扰的,并由此展开,谈到了控制容器使用资源的方式和原理。我们还介绍了如何通过内核的安全机制及相关安全防护程序,来控制程序权限以及防范可能发生的攻击与破坏。另外,我们还将展示常用于Docker的安全策略和防护方法。
第14章 Docker API
本章主要讲解Docker中最基础也最重要的与外界沟通的方式,即Docker API。在对Docker API的实现方式与分类进行介绍之后,我们还将抽取最常用的用于管理Docker核心模块的Docker Remote API,以及用于与远程镜像仓库镜像交互的Docker Registry API进行专门地讲解和示范。
第15章 管理工具
本章主要展示了Docker Compose、Docker Machine、Docker S
本篇文章由一文多发平台ArtiPub自动发布