新致云王川川:如何简析Docker神器?

文/王川川

Docker是一个开源的应用容器引擎,从狭义上讲Docker是指一个开源项目,详见:https://github.com/docker/docker, 按照其开发团队的定义“Docker - the open-source application container engine”, Docker是一个开放源代码的程序容器引擎.

那么什么是container?这里的container特指 Linux Container, 简称LXC, 按照wikipedia上的定义“LXC (Linux Containers) is an operating-system-level virtualization method for running multiple isolated Linux systems (containers) on a control host using a single Linux kernel.” LXC是一种操作系统层面的虚拟方法,能够在同一个主机上使用同一个Linux内核运行多个不同Linux系统。 我们平常说的Ubuntu, Red Hat, CentOS, CELinux, 等等都是不同的Linux系统,他们使用相同的Linux内核。

Linux内核也是一个开源项目,有Linus创建并维护。在Linux内核2.6.24版本中引入了cgroups的功能,以及namespace功能。这两个功能是LXC的基础,简单来说cgroup提供了资源控制的功能,namespace提供了系统隔离的功能。

Docker又是一个公司的名称, 详见http://www.docker.com/.

容器的核心技术自2006年正式合并进Linux内核已经有十年的历史了,Google一直在利用容器技术,并先后开发了三代容器管理系统,最新一代容器管理系统kubernetes由于近年来容器技术非常火所以越来越受大家关注。Docker却是2013年才成立的一家新公司,Dokcer提供的创新之处在于管理容器内容。在此之前容器内容一般是通过压缩包管理的,Docker提供了便捷的管理容器的内容的工具,其主要用到的技术是镜像分层机制和文件系统的Copy-on-Write. 镜像的分层机制主要是将镜像的基础系统层与应用程序层分离,大量容器可以复用同一个基础系统层;Copy-on-Write的基本原理是只有在修改基础系统层镜像时候才会真正的复制它的内容,如果只读则使用一份公共的基础系统层。Docker一直在快速进化,最近提供的Docker云服务也是非常赞的功能,可以在Docker云平台上管理自己的云主机,非常方便的部署自定义的Docker容器。

从广义上讲Docker是一种新的软件部署革命, 主要有Docker公司提出的一种新的软件分布式部署理念: “Build, Ship, Run”, 基于集装箱革命对传统运输业的巨大影响, 在软件行业引入集装箱的概念. 希望软件开发团队发布的产品包含了其运行环境, 能够直接在另外电脑直接执行. 从这一点讲Docker有点像是静态连接库概念,动态链接库的优点是程序更小,占用内存更小,但是在当前硬盘和内存极其廉价的时代静态连接的安全简单特性就更重要了。

有理由相信, Docker会像集装箱对工业带来的变革一样对软件行业带来深远的影响. Docker带来的几个技术突破:

· 快速: 极大的缩短了产品开发完成到发布的时间,利用持续集成工具可以将这些步骤自动化进行,很多先进的开发团队都利用这种技术快速交付,持续更新,将版本更新的速度提高到每周级别,而以前版本迭代都是以年为单位的。

· 简单: 一句命令 docker run image-Name就可以运行, 再也不需要看什么安装手顺了,很多软件都有依赖系统的其它软件及环境配置,安装配置过程也是极易出错的过程,有许多安装脚本都是在简化这一过程,但是安装脚本要想在不同的系统上运行其难度很大。使用Docker容器完美的解决了这些问题,容器包含了程序需要的一切环境。

· 安全: 软件被限制在沙盒内运行, 不会对系统其它部分产生影响.我们很可能都遇到过安装更新某个软件导致系统其它软件不可用的情况,运行在容器中的软件有自己独立的根目录系统,不会对宿主系统的文件系统进行修改,也不会修改运行在其它容器中的程序的运行环境。

在当前云计算的软件行业革命的背景下, Docker为云部署, 水平扩展, 灰度升级等提供了便利; 各种公有私有的Docker镜像提供了云计算的关键共用组件, 极大的降低了云计算的技术门槛. Docker建立在Iaas(基础设施即服务)之上, 为Paas(平台即服务), SaaS(软件即服务), 提供便利, 不少云供应商提出了CaaS(Container as a Service)的概念. Container在Docker公司以及大量先驱者的推动下已经进入井喷前的最后阶段, 估计用不了多久将成为主流的软件开发部署方法.

现在Docker遇到的一些挑战

虽然在我看来Docker必将给我们软件开发行业带来巨大的革命, 但是现阶段来看Docker还是面临一些挑战, 需要解决.

· 镜像安全问题. 现在Docker Hub以及大量第三方镜像市场都在提供大量的免费的Docker镜像, 但是我认为完全建立在免费基础上不形成商业模式的话, 对其长期健康不利. 现阶段的镜像市场一般都是有云服务供应商免费提供, 主要是方便各自的云服务器用户使用. 我觉应该学习Iphone/Android的APP市场, 建立免费与收费并存的Docker镜像市场, 让一些人专门从事提供优质安全可靠的非免费镜像, 作为商业用户当然更愿意花钱去买可靠的产品, 而普通用户可以继续使用免费镜像.

· 现阶段的CaaS是建立在IaaS之上的, 要想建立Container你要首先建立一个虚拟机, 所以有人把Docker当作类似于Puppet的系统配置工具. 虽然可以在同一台物理/虚拟主机上, 建立多个不同的Docker Container, 但是这些容器之间还是可以共享不少资源, 如何做严格的安全限制, 可以将它们租给不同的客户, 这是个技术上待解决的难题. Container相比虚拟机拥有更快的速度更小的体积更高的效率, 但是在资源隔离方面与虚拟机就没法比了. 有一个叫Hyper的公司提出了一个折衷的方案, 将Docker运行在一个轻量级的虚拟机上, 在速度性能上有少许损耗, 但是拥有了良好的资源隔离. 我个人觉得这项技术是非常有前途的, 虽然暂时还是有不少问题.

· 目前Docker容器主要是运行在Linux内核上,在国内Linux系统的普及率还不是很高,虽然Docker公司也在努力提供Windwos以及Mac版本的Docker工具集,但其本质是通过运行在Windows/Mac上的虚拟机来运行一个Linux系统,在这个Linux系统上再运行容器。对于大部分不熟悉Linux系统的普通用户来说使用起来还是有很大的困难,希望在这方面继续努力优化用户界面,按照Windows/Mac用户的思维来设计图形界面,让这些还不习惯使用Linux的用户也可以方便的体验到Docker带来的便利。

推荐阅读更多精彩内容

  • 写这篇文章主要是为了今后毕业论文素材上的整理,同时对docker进行巩固温习。大纲: docker简介docker...
    胡图仙人阅读 6,358评论 2 96
  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 3,839评论 0 27
  • 结果:HumanTTeacherPianoPlayerI am playing piano.I am traini...
    maolazhu阅读 680评论 0 0
  • 每个大佬现在除了关注财富之外他们最注重的就是自己的健康,richard branson说要take care of...
    超级晖阅读 220评论 0 2
  • 介绍 显示debug信息在浏览器中 运行L5应用的时候会启动一些收集器,其中一些是专门为L5定义的 可配置显示Re...
    zigo阅读 335评论 0 0
  • 小涛哥 青春 成长 的路上 既然 心 选择了 远方 就该 甘心 承受 孤独寂寞 不要向 任何人 哭诉悲伤...
    宋大圣阅读 110评论 0 6
  • 三天,三场面试 为我打开了通往鹅厂的大门 一座期盼已久的产品经理殿堂 已忘记何时开始选择了互联网 回思自己的征程起...
    登高望远阅读 1,094评论 1 27