离不开的工具之《Docker开发指南》

图1 Docker开发指南 封面

如果在3年前,你不知道什么是Docker,还是情有可原,因为Docker那时候才出现一年不到的时间。但如果是现在(2017年中),你还没听说过Docker,那么就有些落伍,需要赶紧为自己充充电了。


容器

本书第一部分提到的第一个概念并不是Docker,而是容器。容器是什么,为什么我们要先了解容器?容器是对应用程序及其依赖关系封装。容器看上去像一个轻量级的虚拟机,但容器和虚拟机相比有几个优点:

1、启动和停止快,比如openstack能够以10台/min的速度创建虚拟机,而Docker一般启动一个容器的时间在几十毫秒(谁用谁知道)。

2、可移植,使得开发、测试环境和生产环境保持一致。以Python开发为例,《Python项目开发实战》在一开始教我们搭建开发环境的时候就要用virtualenv来保持一个独立的开发环境,使得python的版本、python第三方包的版本能够保持在一个相对“纯净”的环境里,但是在测试和生产环境你还是要如样构建一个virtualenv的环境才能保证你的程序能够换个地方也能正常运行。再以Node.JS开发为例,Node.JS的版本迭代很快,要想在不同版本之间切换,就要用NVM或n这样的工具。总之,在容器出现以前切换版本、开发环境,保持开发、测试、生产环境一致是一件很费力的事情。但是,有了容器之后就不同了,我们可以把当前配置好的容器发布成镜像,然后再在测试或者生产环境下启动成容器就可以了,保持绝对的一致!

3、在一台机器上可以启动大量的容器,模拟分布式生产环境。以MongoDB为例,为了保证生产环境下的可用性,MongoDB要求我们在生产环境下至少保证一主二从的模式,没有容器的时代,我们要么真去找3台机器来模拟,要么就得起三个虚拟机来运行。而一台普通开发计算机上的资源毕竟是有限的,能跑的虚拟机也是很有限的,一旦你的分布式架构复杂起来了,要想拿一台开发机模拟就有点费劲了。而容器则是轻量级的,一台开发机上跑个几百上千个容器还是小case,再结合容器网络和编排工具,模拟分布式生产环境也是很轻松的事情。

4、可以下载并运行复杂的应用程序。一般我们学习或使用某个工具比如MongoDB/Redis/RabbitMQ/Jenkins啊,书里的第一步都是教你怎么下载、配置环境、安装……,现在就很轻松了,敲个docker pull mongo 就能把MongoDB的镜像下载下来,再敲个docker run mongo就能运行MongoDB控制台了。so easy!

5、微服务(参见《微服务设计》)是最近几年的热门概念,是容器最主要的用例,也是容器技术兴起的最大推动力。容器与生俱来的轻量级特性及速度,意味着它尤其适合用于微服务架构。与虚拟机相比,容器的体积小很多,并且能快速部署,这使得微服务架构能使用最少的资源,又能迅速应对需求的变化。所以这几年来,提到微服务的地方,几乎都少不了容器的身影。


Docker与容器

容器并不是新概念,几十年来,UNIX 系统一直以 chroot 命令来提供简单的文件系统隔离。但是,直到Docker的诞生,补充了以往容器化技术的不足,将容器技术带入主流,并且使Docker成为了容器技术的代名词。Docker 引擎提供了快速且便捷的CLI以及API用来运行容器,而Docker Hub 提供大量的公共容器镜像以供下载,方便用户快速上手,避免了大量重复劳动。Docker 为软件开发带来了翻天覆地的变化。假如没有 Docker,可能容器将仍是一种鲜为人知的技术。

Docker的哲学经常用航运集装箱的比喻来解释,其目标是把集装箱的标准化流程运用到 IT行业中去。Docker 容器简化了“移动”应用程序的工作,好比联运集装箱简化了货物运输一样。开发者只需要专注于程序开发,再也不用担心测试与正式发布时环 境及依赖关系的差异所带来的问题。


图2 Docker 集装箱

Docker基础

第二章介绍Docker的安装,不过安装最新版Docker请到官网的下载地址,请按官网的步骤进行。第三章教你体验一些Docker的基本操作,主要是走马观花,也不是本书的主要方面,要想详细了解可以参阅《Docker基础与实战》,对于Docker指令的熟悉还是要在实战中逐步积累。

第四章介绍Docker的基本概念,诸如镜像、守护进程、网络连接、数据卷等都是玩Docker每时每刻都要打交道的概念,还有Swarm、Compose、Machine、服务发现、服务编排这些进阶概念,对于这些概念的深度介绍可以参见《Docker——容器与容器云》。


Docker与软件生命周期

本书第二部分将告诉我们如何将Docker 整合到软件开发过程中,而且会是我们在实战过程中熟悉Docker的各种概念和指令。要充分的利用 Docker 的功能,就需要采用 DevOps 的思维。在开发的过程中,我们要思考在生产环境中软件将如何运行,如何做能够减轻部署到各种环境时将要面临的痛苦,这也是本书名称叫《Docker开发指南》的原因。

第5章对于熟悉Python的同学来说比较容易上手但也有一些不一样,本章要通过轻量级的Flask跑一个“Hello World”。与《Flask Web开发》 里介绍的安装步骤不一样,在Docker里安装Flask是不需要安装virtualenv,因为容器已经提供了隔离环境。本章教我们用Python官方镜像快速创建一个可移植和可重复创建的Flask镜像,我们可以使用数据卷来动态修改容器中的代码,通过容器轻松的同时维护生产环境和开发环境,最后可以通过使用 Compose 将开发流程自动化。

在第6章里,我们马上可以把上面这个镜像应用起来,再把identicon加入进来,再用compose把我们创建的identidock容器与dnmonster容器连接起来,再添加一个redis我们就可以为这个系统添加缓存微服务。就像搭积木一样,三个容器三个微服务构成了一个微服务架构的系统,这种系统很适合横向扩展到多台机器。由于每个容器/微服务各自独立,所以将其中的微服务被其他效能更高且功能相同的服务替代。在发生意外情况的时候,可以只对部分微服务进行回滚,无需把系统的其他部分一并关闭。还有一点就是,我们看到不同的微服务可以用不同的语言实现,使我们能够选择适用于手头任务的语言。

第7、8、9、10章分别涉及镜像分发、持续集成与测试、部署容器、日志与监控。涉及开发完成后的持续集成/测试/生产的过程。在DevOps里,前一段是开发,后一段就是运维以及不断的持续迭代。跟着这几章走下来,你就会发现容器天生就适用于持续集成与持续交付的工作流。


Docker 容器集群

在真正的生产环境里的分布式系统不会只有一台服务器,更不会只有一个容器,你还得应付潜伏着的黑客,所以联网和服务发现、编排、集群和管理、容器安全与限制容器都是必不可少的内容。

服务发现在现今的分布式和动态系统中往往是必不可少的功能。容器和服务都会不断变化,它们会因需求或故障而被停止、启动和迁移。而方案也有很多种,到底是zookeeper还是etcd,究竟什么是正确的选择,很大程度取决于你的特定需求和你所使用的平台。

现在市面上常见的集群和编排工具有:Swarm、fleet、Kubernetes 和 Mesos,第12章依次介绍了它们的独特功能。Swarm 的优点在于它使用了标准的 Docker 接口。这使得无论是使用它还是把它整合到现有的工作流程都非常容易。fleet 是一个低阶并且相当简单的编排层,可以作为运行更高阶的编排工具(如 Kubernetes)或定制系统的基础。Kubernetes 作为一个编排工具,它自带服务发现和复制的功能,并且很坚持自己的一套设计理念。使用它时或许需要对现有应用程序重新设计。Mesos 则支持多个容器编排框架,包括 Marathon、Kubernetes 和 Swarm。

为了能够安全地使用 Docker,防止被黑,我们必须对潜在的安全问题有清楚的认识,并且对保护容器化系统的主要工具和技术有所了解。第13章在安全性方面给了我们不少建议,需要我们注意。在安全性方面,容器技术提供了正面作用,因为它能够提供多一重隔离和控制。无论在什么时候,正确使用容器的系统只会比没有使用容器的系统更安全。

关于容器集群实战的更多信息,可以参阅《Docker经典实例


总结

以本书的篇幅而言,不可能是一本Docker百科大全,因为Docker/容器/微服务/CI/CD/DevOps涉及到的东西实在是太杂太多,所以不可能由一本书进行全覆盖,事实上目前也没有这样一本Docker百科全书。但本书以DevOps的思想出发,以实战的方式指导,涉及到了从Docker开发到运维的方方面面,《Docker开发指南》实在是一本不可多得的好书。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容