购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

前言

作为互联网大军中的一员,我经常会思考:如何避免“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月 l1lxrhO4YNzC944WaVTdhNe/sjwSejWkVaXGdTPaYDanrBe5frIAwh5s2O9iXumd

点击中间区域
呼出菜单
上一章
目录
下一章
×