新書推薦:
《
火枪与账簿:早期经济全球化时代的中国与东亚世界
》
售價:NT$
352.0
《
《全面与进步跨太平洋伙伴关系协定》国有企业条款研究
》
售價:NT$
449.0
《
银行业架构网络BIAN(全球数字化时代金融服务业框架)(数字化转型与创新管理丛书)
》
售價:NT$
449.0
《
金托邦:江湖中的沉重正义
》
售價:NT$
275.0
《
易经今解:释疑·解惑·见微
》
售價:NT$
403.0
《
东欧史(全二册)-“中间地带”的困境
》
售價:NT$
1010.0
《
虚拟资本:金融怎样挪用我们的未来
》
售價:NT$
352.0
《
刻意练习不生气
》
售價:NT$
179.0
|
編輯推薦: |
全面讲解精通Harbor所需的方方面面:架构、原理、功能、部署与配置、运维、定制化开发、API、项目治理和成功案例等 很多用户关注的内容在书中都有详尽讲解:Harbor的架构原理;OCI制品的支持方式;高可用制品仓库的设计要点;镜像等制品的扫描;权限和安全策略;备份与恢复策略;API使用指南等。 并对用户使用Harbor的常见问题进行分析和解答 涵盖众多企业使用Harbor的案例
|
內容簡介: |
在云原生生态中,容器镜像和其他云原生制品的管理与分发是至关重要的一环。本书对开源云原生制品仓库Harbor展开全面讲解,由Harbor开源项目维护者和贡献者倾力撰写,内容涵盖Harbor的架构、原理、功能、部署与配置、运维、定制化开发、API、项目治理和成功案例等,很多未公开发表的内容在本书中都有详尽讲解,如:Harbor的架构原理;OCI制品的支持方式;高可用制品仓库的设计要点;镜像等制品的扫描;权限和安全策略;备份与恢复策略;API使用指南等。
|
關於作者: |
张海宁VMware中国研发中心云原生实验室技术总监,Harbor开源项目创建者及维护者,拥有多年软件架构设计及全栈开发经验,为多个开源项目贡献者,Cloud Foundry中国社区较早的技术布道师之一,亨利笔记公众号作者,从事云原生、机器学习及区块链等领域的创新工作。
邹佳VMware中国研发中心主任工程师,Harbor开源项目架构师及核心维护者,拥有十多年软件研发及架构经验,获得PMP资格认证及多项技术专利授权。曾在HPE、IBM等多家企业担任资深软件工程师,专注于云计算及云原生等领域的研究与创新。
王岩VMware中国研发中心高级研发工程师,Harbor开源项目维护者,负责Harbor多项核心功能的开发,专注于云原生、Kubernetes、Docker等领域的技术研究及创新。
尹文开VMware中国研发中心高级研发工程师,Harbor开源项目维护者,从Harbor的原型研发开始一直参与Harbor项目,长期从事容器领域的研究及开发工作。
任茂盛VMware中国研发中心高级研发经理,Harbor开源项目维护者,在网络、虚拟化、云计算及云原生领域有丰富的产品开发及管理经验。在VMware先后负责vSphere、OpenStack、Tanzu等现代应用平台产品的开发。
姜坦VMware中国研发中心主任工程师,Harbor开源项目核心维护者,毕业于北京航空航天大学,从事云原生领域的软件开发工作。张海宁 VMware中国研发中心云原生实验室技术总监,Harbor开源项目创建者及维护者,拥有多年软件架构设计及全栈开发经验,为多个开源项目贡献者,Cloud Foundry中国社区较早的技术布道师之一,亨利笔记公众号作者,从事云原生、机器学习及区块链等领域的创新工作。
邹佳 VMware中国研发中心主任工程师,Harbor开源项目架构师及核心维护者,拥有十多年软件研发及架构经验,获得PMP资格认证及多项技术专利授权。曾在HPE、IBM等多家企业担任资深软件工程师,专注于云计算及云原生等领域的研究与创新。
王岩 VMware中国研发中心高级研发工程师,Harbor开源项目维护者,负责Harbor多项核心功能的开发,专注于云原生、Kubernetes、Docker等领域的技术研究及创新。
尹文开 VMware中国研发中心高级研发工程师,Harbor开源项目维护者,从Harbor的原型研发开始一直参与Harbor项目,长期从事容器领域的研究及开发工作。
任茂盛 VMware中国研发中心高级研发经理,Harbor开源项目维护者,在网络、虚拟化、云计算及云原生领域有丰富的产品开发及管理经验。在VMware先后负责vSphere、OpenStack、Tanzu等现代应用平台产品的开发。
姜坦 VMware中国研发中心主任工程师,Harbor开源项目核心维护者,毕业于北京航空航天大学,从事云原生领域的软件开发工作。
裴明明 网易杭州研究院轻舟云原生架构师,Harbor开源项目维护者,主要负责网易轻舟云原生DevOps体系设计、研发及落地等,在云原生、DevOps、微服务架构等领域拥有丰富的经验。
邓谦 VMware中国研发中心研发工程师,Harbor开源项目贡献者,参与了Harbor多个组件及功能的开发工作,多次参与Harbor的技术活动支持及分享,在云原生及监控系统等领域拥有丰富的经验。
何威威 VMware中国研发中心高级研发工程师,Harbor开源项目贡献者,专注于性能测试调优、云原生等领域的技术研发。
孔矾建 腾讯高级工程师,负责腾讯云镜像仓库产品的研发;Harbor开源项目维护者,深耕容器镜像存储及分发、云存储、云原生应用领域。
张子明 VMware中国研发中心高级研发工程师,Harbor开源项目贡献者。拥有多年软件全栈开发经验,对云原生、配置管理等领域有较深入的研究。
陈家豪 VMware中国研发中心研发工程师,专注于容器、网络及分布式技术的研发,积极参与开源社区的建设,是区块链开源项目Hyperledger Cello的维护者之一,也是联邦学习开源项目FATE及KubeFATE等的贡献者。深耕虚拟化、云计算及区块链等领域。
张道军 VMware中国研发中心主任工程师,Harbor开源项目贡献者,毕业于北京航空航天大学。关注应用性能监控、性能调优、云原生等领域。
陈德 腾讯专有云平台研发工程师,Harbor开源项目维护者,主要负责腾讯云原生有状态服务管理平台的设计及开发,并实现服务的自动化运维管理。
|
目錄:
|
第1章 云原生环境下的制品管理 1
1.1 云原生应用概述 2
1.2 容器技术简介 5
1.2.1 容器技术的发展背景 5
1.2.2 容器的基本原理 7
1.2.3 容器运行时 8
1.3 虚拟机和容器的融合 14
1.3.1 vSphere Pod 14
1.3.2 Kata Containers 16
1.4 容器镜像的结构 17
1.4.1 镜像的发展 17
1.4.2 Docker镜像的结构 18
1.4.3 Docker镜像的仓库存储结构 20
1.4.4 Docker镜像的本地存储结构 24
1.4.5 OCI镜像规范 25
1.5 镜像管理和分发 34
1.5.1 Docker镜像管理和分发 34
1.5.2 OCI分发规范 35
1.5.3 OCI Artifact 37
1.6 镜像仓库Registry 40
1.6.1 Registry的作用 41
1.6.2 公有Registry服务 43
1.6.3 私有Registry服务 43
1.6.4 Harbor Registry 44
第2章 功能和架构概述 47
2.1 核心功能 47
2.1.1 访问控制 48
2.1.2 镜像签名 49
2.1.3 镜像扫描 50
2.1.4 高级管理功能 52
2.2 组件简介 58
2.2.1 整体架构 58
2.2.2 核心组件 59
2.2.3 可选组件 63
第3章 安装Harbor 65
3.1 在单机环境下安装Harbor 65
3.1.1 基本配置 66
3.1.2 离线安装 74
3.1.3 在线安装 76
3.1.4 源码安装 77
3.2 通过Helm Chart安装Harbor 80
3.2.1 获取Helm Chart 80
3.2.2 配置Helm Chart 81
3.2.3 安装Helm Chart 95
3.3 高可用方案 96
3.3.1 基于Harbor Helm Chart的高可用方案 96
3.3.2 多Kubernetes集群的高可用方案 99
3.3.3 基于离线安装包的高可用方案 101
3.4 存储系统配置 105
3.4.1 AWS的Amazon S3 106
3.4.2 网络文件系统NFS 108
3.4.3 阿里云的对象存储OSS 108
3.5 Harbor初体验 110
3.5.1 管理控制台 110
3.5.2 在Docker中使用Harbor 120
3.5.3 在Kubernetes中使用Harbor 121
3.6 常见问题 124
第4章 OCI Artifact的管理 125
4.1 Artifact功能的实现 125
4.1.1 数据模型 126
4.1.2 处理流程 128
4.2 镜像及镜像索引 131
4.3 Helm Chart 134
4.3.1 Helm 3 135
4.3.2 ChartMusuem的支持 139
4.3.3 ChartMuseum和OCI仓库的比较 141
4.4 云原生应用程序包CNAB 142
4.5 OPA Bundle 145
4.6 其他Artifact 147
第5章 访问控制 149
5.1 概述 149
5.1.1 认证与授权 149
5.1.2 资源隔离 150
5.1.3 客户端认证 152
5.2 用户认证 153
5.2.1 本地数据库认证 153
5.2.2 LDAP认证 154
5.2.3 OIDC认证 159
5.3 访问控制与授权 169
5.3.1 基于角色的访问策略 169
5.3.2 用户与分组 170
5.4 机器人账户 173
5.5 常见问题 175
第6章 安全策略 177
6.1 可信内容分发 177
6.1.1 TUF与Notary 178
6.1.2 内容信任 182
6.1.3 Helm 2 Chart签名 186
6.2 插件化的漏洞扫描 188
6.2.1 整体设计 190
6.2.2 扫描器管理 192
6.2.3 扫描API规范 193
6.2.4 扫描管理 197
6.2.5 异步扫描任务 201
6.2.6 与扫描相关的API 202
6.3 使用漏洞扫描功能 207
6.3.1 系统扫描器 207
6.3.2 项目扫描器 209
6.3.3 项目漏洞扫描 210
6.3.4 全局漏洞扫描 213
6.3.5 自动扫描 214
6.3.6 与漏洞关联的部署安全策略 214
6.3.7 已支持的插件化扫描器 216
6.4 常见问题 218
第7章 内容的远程复制 220
7.1 基本原理 220
7.2 设置Artifact仓库服务 223
7.3 复制策略 225
7.3.1 复制模式 225
7.3.2 过滤器 225
7.3.3 触发方式 226
7.3.4 创建复制策略 228
7.3.5 执行复制策略 229
7.4 Harbor实例之间的内容复制 231
7.5 与第三方仓库服务之间的内容复制 232
7.5.1 与Docker Hub之间的内容复制 233
7.5.2 与Docker Registry之间的内容复制 234
7.5.3 与阿里云镜像仓库之间的内容复制 235
7.5.4 与AWS ECR之间的内容复制 236
7.5.5 与GCR之间的内容复制 236
7.5.6 与Helm Hub之间的内容复制 237
7.6 典型使用场景 238
7.6.1 Artifact的分发 238
7.6.2 双向同步 239
7.6.3 DevOps镜像流转 240
7.6.4 其他场景 241
第8章 高级管理功能 242
8.1 资源配额管理 242
8.1.1 基本原理 242
8.1.2 设置项目配额 247
8.1.3 设置系统配额 247
8.1.4 配额的使用 249
8.1.5 配额超限的提示 252
8.2 垃圾回收 253
8.2.1 基本原理 253
8.2.2 触发方式 256
8.2.3 垃圾回收的执行 257
8.3 不可变Artifact 258
8.3.1 基本原理 259
8.3.2 设置不可变Artifact的规则 260
8.3.3 使用不可变Artifact的规则 262
8.4 Artifact保留策略 263
8.4.1 基本原理 263
8.4.2 设置保留策略 265
8.4.3 模拟运行保留策略 269
8.4.4 触发保留策略 271
8.5 Webhook 272
8.5.1 基本原理 273
8.5.2 设置Webhook 276
8.5.3 与其他系统的交互 280
8.6 多语言支持 284
8.7 常见问题 286
第9章 生命周期管理 288
9.1 备份与恢复 288
9.1.1 数据备份 288
9.1.2 Harbor的恢复 290
9.1.3 基于Helm的备份与恢复 291
9.1.4 基于镜像复制的备份和恢复 292
9.2 版本升级 295
9.2.1 数据迁移 296
9.2.2 升级Harbor 299
9.3 系统排错方法 300
9.4 常见问题 305
9.4.1 配置文件不生效 305
9.4.2 Docker重启后Harbor无法启动 305
9.4.3 在丢失secret key的情况下删除已签名的镜像 306
9.4.4 丢失了系统管理员admin的密码 307
第10章 API的使用方法 308
10.1 API概述 308
10.1.1 核心管理API概述 309
10.1.2 Registry API概述 313
10.2 核心管理API 315
10.2.1 用户管理API 315
10.2.2 项目管理API 317
10.2.3 仓库管理API 319
10.2.4 Artifact管理API 319
10.2.5 远程复制API 322
10.2.6 扫描API 324
10.2.7 垃圾回收API 326
10.2.8 项目配额API 327
10.2.9 Tag保留API 328
10.2.10 不可变Artifact API 329
10.2.11 Webhook API 330
10.2.12 系统服务API 331
10.2.13 API控制中心 332
10.3 Registry API 336
10.3.1 Base API 337
10.3.2 Catalog API 337
10.3.3 Tag API 337
10.3.4 Manifest API 338
10.3.5 Blob API 338
10.4 API编程实例 339
10.5 小结 340
第11章 异步任务系统 341
11.1 系统设计 341
11.1.1 基本架构 342
11.1.2 任务编程模型 350
11.1.3 任务执行模型 353
11.1.4 任务执行流程解析 354
11.1.5 系统日志 357
11.1.6 系统配置 358
11.1.7 REST API 360
11.2 核心代码解读 364
11.2.1 代码目录结构 365
11.2.2 主函数入口 366
11.2.3 系统的启动过程 367
11.2.4 API服务器的启动过程 371
11.2.5 任务运行器的执行过程 375
11.2.6 系统中的关键子模块 379
11.3 常见问题 400
11.3.1 如何排除故障 401
11.3.2 状态不一致 402
第12章 应用案例 404
12.1 Harbor功能的集成 404
12.1.1 vSphere 7.0 404
12.1.2 Tanzu Kubernetes Grid 412
12.1.3 P2P镜像分发 414
12.1.4 云原生的联邦学习平台 420
12.2 成功案例 423
12.2.1 网易轻舟微服务平台 423
12.2.2 京东零售镜像服务 428
12.2.3 品高云企业级DevOps实战 431
12.2.4 骞云SmartCMP容器即服务 434
12.2.5 前才云容器云平台 435
12.2.6 360容器云平台的Harbor高可用方案 440
第13章 社区治理和发展 443
13.1 Harbor社区治理 443
13.1.1 治理模式 443
13.1.2 安全响应机制 446
13.1.3 社区参与方式 449
13.1.4 参与项目贡献 451
13.2 项目展望 463
13.2.1 镜像代理 463
13.2.2 P2P镜像预热 464
13.2.3 Harbor Operator 466
13.2.4 非阻塞垃圾回收 467
附录A 词汇表 471
|
內容試閱:
|
本书写作初衷
2013年,Docker在发布之后取得空前的成功,成为史上非常受欢迎的开发工具之一。除了简便、易用,镜像技术也是Docker的核心所在,包括镜像格式的创新和用于镜像分发的Registry服务。Docker公司的著名口号Build, Ship and Run(构建、传送和运行),概括了应用开发的精髓,其中隐藏的含义是构建镜像、传送镜像和运行镜像,一切皆以镜像为中心。OCI组织的三个规范与该口号分别对应:镜像规范(构建)、运行时规范(运行)和正在制定的分发规范(传送)。尽管目前这些规范有一些不同的实现,但镜像规范的实现基本上以Docker的镜像格式为主。由此可见,镜像是容器应用的关键技术,围绕镜像的一系列管理工作将是实际运维工作的重中之重。
在Docker出现之前,我在Sun公司任职时已经接触和使用过容器技术(Solaris Containers)。从2012年开始,我在VMware公司负责Cloud Foundry开源PaaS项目的技术推广工作。Cloud Foundry项目使用了被称为Warden的容器引擎来运行应用。Warden与Docker类似,都是PaaS项目中的容器执行引擎,只是被埋藏在Cloud Foundry项目中,没有像Docker那样独立发布出来。
我初次接触Docker后,被其流畅的使用体验和优秀的容器方案所震撼,深感这将是应用开发的一个大趋势。对Docker进行研究后,我发现容器镜像是Docker软件的命脉所在,而当时并没有很好的镜像管理工具。在同期的一些技术大会上,也有不少用户抱怨在镜像管理方面遇到各种难题。
于是,针对镜像管理的诸多痛点,我带领团队开发了一个容器镜像管理软件,在公司内部试用后取得一定的成效。这个软件就是Harbor的原型。Harbor在开源后受欢迎的程度远超我们所料。Harbor图形化的镜像管理功能独树一帜,切中了容器应用开发和运维的要点,在国内获得大量用户的青睐,参与Harbor开源项目的开发者也在与日俱增。
在加入CNCF后,Harbor和全球云原生社区的合作更加紧密,并加强了对Kubernetes和Helm的支持。在Harbor 2.0中还支持OCI的镜像规范和分发规范,可管理各类云原生领域的制品。
目前已经有很多用户在生产系统中部署了Harbor,国内很大一部分用户都将Harbor作为镜像和Helm Chart的制品仓库。Harbor的维护者们通过微信群、GitHub及邮件组等的问题反馈了解到不少用户遇到的问题,这些问题产生的主要原因有二:其一,用户对Harbor的安装、配置等理解不彻底;其二,文档资料不完整或者缺失。由此可见,Harbor用户亟需一本参考书作为Harbor系统的使用指引,然而市面上并没有这样的书籍。正逢电子工业出版社的张国霞编辑邀请我编写一本关于Harbor的技术书,我便与Harbor项目的维护者们进行了沟通,沟通的结果是大家一致希望编写本书来完整介绍Harbor项目的方方面面,让Harbor带来更大的价值。本书的编撰工作便开始了。
撰写书稿是相当艰辛的,大多数作者需要在繁忙的工作之余挤出时间查资料和编写书稿,并且互相审阅和修订,有的章节甚至修改了不下十遍。但作者们都有一个共同的心愿:希望通过本书把Harbor的各个功能准确、详尽地传递给读者,帮助读者理解和使用好Harbor的功能。
本书特色
这是一本全面介绍Harbor云原生制品仓库的书籍,涵盖Harbor架构、原理、配置、定制化开发、项目治理和成功案例等内容,由Harbor开源项目维护者和贡献者倾力撰写,其中不乏Harbor项目的早期开发人员,甚至Harbor原型代码的编制者。
需要特别说明的是,很多未公开发表的内容在本书中都有详尽讲解,如:Harbor的架构原理;OCI制品的支持方式;高可用制品仓库系统的设计要点;镜像等制品的扫描、权限和安全策略;备份与恢复策略;API使用指南等。对Harbor用户和开发者来说,本书是非常理想的参考资料。
本书读者对象
云原生软件开发工程师、测试工程师和运维工程师 IT架构师和技术经理 Harbor开源项目的用户、开发者和贡献者 计算机相关学科的高校学生
本书架构及使用方法
本书共有13章,部分章节由多位作者合力完成,以更准确地阐释相应的内容。下面列出每章的主要内容和作者。
第1章介绍云原生应用的产生背景、以镜像为主的制品管理原理和规范,以及制品仓库的作用,由张海宁负责撰写,任茂盛、裴明明参与撰写。
第2章概述Harbor功能和架构,为读者理解后续的章节做铺垫,由姜坦负责撰写。
第3章详细讲解Harbor的安装、部署,包括高可用部署的方案要点,还包括对Harbor的入门性介绍,由王岩负责撰写,孔矾建、任茂盛参与撰写。
第4章介绍Harbor支持和管理OCI制品原理、常见OCI制品的使用方法,由任茂盛负责撰写,尹文开、张海宁、邹佳参与撰写。
第5章阐释Harbor的权限管理和访问控制的原理,以及相关配置方法,由何威威负责撰写,张海宁参与撰写。
第6章解析Harbor中可使用的安全策略,包括可信的内容分发和漏洞扫描机制,由邹佳负责撰写。
第7章讲解镜像、Helm Chart等制品在Harbor中的远程复制原理,以及与其他仓库服务的集成原理,由尹文开负责撰写。
第8章详述Harbor的高级管理功能,包括资源配额、垃圾回收、不可变Artifact、保留策略、Webhook等,由王岩负责撰写,裴明明、张子明、邓谦参与撰写。
第9章解释Harbor生命周期的管理过程,包括备份、恢复、升级的步骤和方法,由邓谦负责撰写。
第10章梳理Harbor的API的使用方法并给出编程示例,由尹文开负责撰写,张海宁参与撰写。
第11章描述Harbor后台异步任务系统的机理,并分析其主要源代码的工作原理,由邹佳负责撰写。
第12章汇集和整理Harbor与其他系统的整合方法及社区用户的成功案例,由张海宁负责撰写,裴明明、任茂盛、孔矾建、陈家豪参与撰写。
第13章介绍Harbor开源社区的管理原则、告警机制和开源项目的参与方式,并展望项目的发展方向,由张海宁负责撰写,邹佳、王岩、孔矾建、张道军、尹文开、陈德参与撰写。
我们建议读者这样使用本书:
对云原生领域特别是容器技术不太了解的读者,可以先阅读第1章的基础知识; 初次接触Harbor的读者,可以直接阅读第2章以快速了解Harbor的功能和架构; 希望快速上手Harbor的读者,可以按照第3章的讲解,从部署Harbor仓库软件着手; 对Harbor有一定使用经验的读者,可以按需阅读第3~13章的内容; 有意向参与Harbor开源项目贡献的开发者,可以重点阅读第13章。
加入本书读者交流群
本书已建立读者交流群,既可以参见封底提示加入,也可以在亨利笔记公众号后台回复读者二字获邀加入,入群后可以进行技术讨论和意见反馈。希望加入Harbor用户群的读者,可以关注Harbor社区公众号(微信号为HarborChina),在后台回复入群二字,即可收到入群邀请。
致谢
本书的主要编写时间在2020年4月之后,因为正处特殊时期,所以本书的写作交流几乎只能线上进行,但作者们都拥有共同的信念且相互信任,克服了重重困难,使本书顺利出版。在此感谢各位作者为本书出版付出的巨大努力,他们是VMware中国研发中心Harbor开发组的成员:主任工程师邹佳、高级研发工程师王岩、高级研发工程师尹文开、高级研发经理任茂盛、主任工程师姜坦、研发工程师邓谦、高级研发工程师何威威、高级研发工程师张子明、主任工程师张道军,以及网易杭州研究院轻舟云原生架构师裴明明、腾讯高级工程师孔矾建、VMware中国研发中心研发工程师陈家豪、腾讯专有云平台研发工程师陈德。其中,特别感谢邹佳,他不仅编写了翔实的内容,还协助我进行了统稿和协调工作。感谢任茂盛组织和协调写作资源,也感谢王岩、尹文开、裴明明撰写了大量内容。同时感谢电子工业出版社的张国霞编辑,她不辞劳苦地为本书进行策划、审稿、校正等工作,并鼓励作者们完成艰巨的写作任务。
由衷感谢为本书作序的各位大师和领导。其中,我的恩师、微众银行首席人工智能官杨强教授给予我很多鼓励和支持,推动了联邦学习与Harbor等云原生技术的融合,并拨冗写序和提出宝贵意见。VMware中国研发中心总经理、Harbor项目联合发起人任道远先生是我多年的领导,也是中国云原生社区不遗余力的布道者和倡导者,他从Harbor的原型阶段开始一直支持和推动着项目的发展,对Harbor项目取得的成绩功不可没。网易云计算中心总经理陈谔先生是云计算和云原生探索和实践的先锋,他带领的网易轻舟团队在微服务平台中使用了Harbor,还给Harbor开源项目贡献代码,为本书提供了实践案例等内容,在推荐序中分享的服务架构演进的经验更值得我们研读和学习。
感谢同事Harbor项目经理徐天行先生、王晓璇女士、宋春雪女士对Harbor中国社区长期以来的管理和运营,以及对出版本书的协助。感谢我多年的挚友李天逸先生对本书内容的帮助。感谢为本书提供Harbor案例的社区用户和合作伙伴:广州市品高软件股份有限公司联合创始人刘忻先生、品高云产品总监邱洋先生、上海骞云科技创始人和CEO方礼先生、前才云科技CEO张鑫先生、CNCF官方大使和京东技术架构部产品经理张丽颖女士、360搜索事业群高级总监张华先生。也感谢广大Harbor用户对本书内容所提出的建议。
最后,感谢我的爱人和孩子,因为写作本书,我牺牲了很多陪伴他们的时间,他们的鼓励也使我能坚持把书写完。同时,感谢我的父母和兄长,他们在我童年时代学习计算机知识时给予我的支持和指导,使我在信息技术领域一直走到现在。
张海宁
2020年9月
|
|