在 Mac 上跳舞的容器 — Docker

 

不要被容器时代抛弃,从Mac开始吧...



题图:from Zoommy

在很久以前,比如2014年,我写过一篇关于 Docker 的文章,并许下誓言要写个 Docker 的系列,然后就去干别的了。读过那篇文章的,可能已经忘记,没读过的,您也记不起来。最近又开始折腾容器技术,有必要把这个内容捡起来再写写。

容器技术由来已久,比如 Linux Containers,但是真正让容器进入人们视野的,是 Docker。Docker 始于 2010年。

2010年,几个年轻人在旧金山成立了一家做 PaaS 平台的公司,起名为「dotCloud」。dotCloud 主要是基于 PaaS 平台为开发者或开发商提供技术服务。什么是 PaaS 呢?PaaS 的全称是 Platform as a Service,也就是平台即服务,这个概念在2010年热的一塌糊涂,直到现在也没凉下来。举个例子来说,传统的软件产品开发一般是这样的:

1、确定产品定位和需求,确定首次迭代的范围。
2、制作界面原型。
3、技术选型,然后根据技术选型为每个开发者搭建开发环境和技术栈,例如 PHP 环境,Java 环境、Python 环境、Ruby 环境、数据库、各类中间件等等。
4、构建基础技术框架和服务,包括日志、存储、消息、缓存、搜索、数据源、集群扩展等等。
5、模拟用户容量,构建测试环境。
6、开始编写真正的业务代码,实现产品功能。
7、迭代开发/测试,生生不息,周而复始,直到产品经理崩溃为止……

如果采用完善的 PaaS 平台,可以直接忽略3、4、5三个步骤。无论你选择哪个技术栈,PaaS 都会为你提供相关的配套设置,包括语言环境、运行环境、存储和各种基础服务。dotCloud 不仅支持诸如 PHP、MySql 等传统技术框架,还包括 Node.js、MongoDB 等新兴技术,你可以直接使用 dotCloud 的 SDK 编写代码和构建业务服务,并在联网的时候把这些代码推送到云端,实现自动部署和测试。

dotCloud 花费了大量时间把手工工作和重复劳动抽象成组件和服务,并放到了云端,另外,它还提供了各种监控、告警和控制功能,方便开发者管理和监控自己的产品。dotCloud 最初运行在 Amazon 的 EC2 上,不过由于 dotClout 高度的抽象层次,理论上 dotCloud 可以运行在各种各样的云服务上面(我想这就是 Docker 的功劳)。

一切看起来很美,如果后来的事情按照这个设想进行下去的话,软件厂商和程序员都会松好几口气。但是,程序猿们不是那么好对付的,给他们(或者是我们)做工具一直是件非常危险的事情,虽然程序猿常常分不清楚女友的发型和衣服款式,但是对开发环境和开发工具却非常敏感并要求极高。文人相轻,程序猿也不例外,对自己人常常下死手。所以,PaaS 的概念虽好,但是由于认知、理念和技术的局限性,早期市场的接受度并不高,规模也不够大。

除此之外,巨头不断进场搅局,IBM 的蓝云,微软的 Azure,Amazon 的 EC2,Google 的 GAE,VMware 的 Cloud Foundry 等等,可谓强敌环伺,而且都不差钱。在这种情况下,虽然 dotCloud 在2011年初拿到了1000万美元的融资,但依然举步维艰。

在这种前有堵截后有追兵的情况下,dotCloud 的创始人 Solomon Hykes 做了一件漫不经心的小事,他把 dotCloud 的核心容器引擎开源了。

山重水复疑无路,柳暗花明又一村!

这个基于 Linux Container 技术的核心管理引擎一经开源立刻得到了「业界」的热烈吹捧,首当其冲的,哦,又是程序猿们。看到好的开源产品,这帮平时木了吧唧的家伙就像猴子看见桃的一样,一窝蜂冲了上去,边吃边说好吃。这个容器管理引擎大大降低了容器技术的使用门槛,轻量级,可移植,虚拟化,语言无关,写了程序扔上去做成镜像可以随处部署和运行,开发、测试和生产环境彻底统一了,还能进行资源管控和虚拟化。程序员们流着口水惊呼,太方便了,太方便了(这两句来自老罗语录)。

这个引擎的名字叫做 Docker,以 Go 语言写成。

这个结果大大出乎 dotCloud 创始人的意外,他们本来是按照穷小子模式来培育 Docker 的,没成想直接养出了一个婀娜多姿的大美女,明眸善睐,顾盼生姿,不仅程序猿们神魂颠倒,旁边几个高楼大厦里的土豪也时不时过来搭讪聊天。

从此以后,他们开始专心研发 Docker 产品和维护相关社区,王子和公主过上了幸福而快乐的生活。2013年10月 dotCloud 公司更名为 Docker 股份有限公司,2014年8月 Docker 宣布把平台即服务的业务「dotCloud」出售给位于德国柏林的平台即服务提供商「cloudControl」,dotCloud 的历史告一段落。同年8月,Docker 内部员工 James Turnbull 发布了面向开发者、运维和系统管理员的 Docker 电子书《The Docker Book》。

有意栽花花不开,无心插柳柳成荫!

Docker 的技术特点现在大家都很清楚了,比如它能够以容器的方式自动部署任何应用;轻量级,可移植,虚拟化,语言无关;容器是一系列进程的集合;基于 namespaces 和 cgroups 实现资源的隔离和分组;基于 copy-on-write 技术创建文件系统,分层、快速、占用空间少;提供交互式 shell 和 remote api 等等。但是,与任何一门新兴技术的兴起一样,Docker 一路走来,给工程师和技术尝鲜者挖坑无数,有进程管理的问题,资源隔离的问题,内存泄露问题,包依赖问题,网络问题等等,如果没遇到,那是你的幸运,因为你就没用到生产环境!写到这我想起了一个笑话,有人问:

你最先接触的七门语言是?

哦……它们是 Swift 1.0、Swift 1.1、Swift 1.2、Swift 2.0、Swift 2.1、Swift 2.2、Swift 2.3。目前我正在加班迁移 Swift 代码……

无论如何,感谢这些开发者和技术尝鲜者,Docker 正变得越来越成熟和稳定。我记得当年在 Mac 上搭建环境要分别安装 VirtualBox、Boot2docker 和 Docker 本身,还要配置一系列环境变量,搞的异常复杂,现在就简单的多了,差不多能做到一步到位。

目前 Docker 为 Mac 提供了两种非常简单直接的安装方式,一种是 Docker for Mac,一种是 Docker Toolbox,Boot2docker 已经彻底废弃了。我推荐第一种,因为它是原生的。

到这个网址下载 Docker.dmg,[ https://download.docker.com/mac/stable/Docker.dmg ],打开后直接把那个大鲸鱼图标的 App 拖入应用程序文件夹,双击打开程序,你会看到标题栏出现了一个Docker 的鲸鱼图标,点开发现 Docker 已经在运行了。

详细的安装指导请参考 [ https://docs.docker.com/engine/installation/mac/ ]。

另外,Docker 集成了容器管理工具 Kitematic,直接到 [ https://kitematic.com ] 下载即可,注册了 Docker Hub 之后,满屏幕都是推荐的 Docker 镜像,爽到没朋友。想起我们当年写的容器和镜像管理工具,真是一把辛酸泪啊。选择一个你喜欢的镜像,下载,运行,你就会得到自己的第一个容器了。



Docker Hub 在国内网络不是很稳定,注意科学上网。

另外给大家推荐一本 gitbook 上的免费电子书《Docker — 从入门到实践》,网址是:

[ https://www.gitbook.com/book/yeasy/docker_practice/details ]

容器时代,不容错过,祝大家玩的开心:)

9月份 MacTalk 底部 banner 广告商是豆瓣。豆瓣在互联网历史上是一家「独立存在」的公司,我很喜欢。2014年8月8日,豆瓣的创始人阿北说,我们今天发布了一个叫做「豆瓣」的新应用,我们希望它以后是所有人手里的「豆瓣」。

如今这个 App 的版本到了4.2,相比原来的版本,4.x 突出了更为多样性的内容,我喜欢这个版本,用它在豆瓣记录了一些书和电影的相关信息。点击原文或者长按二维码下载,在 App 里搜索池建强可以找到我。


    关注 MacTalk


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册