Docker究竟是什么,为什么这么流行,它的优点和缺陷有哪些?

Docker是什么?

简单得来说,Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs); 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。

Docker是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台。由两部分组成:

Docker Engine: 一个便携式、轻量级的运行环境和包管理器。(注* 单OS vs 单线程,是不是跟NodeJS特别像?)

Docker Hub: 为创建自动化工作流和分享应用创建的云服务组成。(注* 云端镜像/包管理 vs npm包管理,是不是跟npm特别像?)

从2013年3月20日,第一个版本的Docker正式发布到 2014年6月 Docker 1.0 正式发布,经历了15个月。 虽然发展历程很短,但Docker正在有越来越流行的趋势。

其实Container技术并非Docker的创新,HeroKu, NodeJitsu 等云服务商都采用了类似这种轻量级的虚拟化技术,但Docker是第一个将这这种Container技术大规模开源并被社区广泛接受的。

好的部分

Docker相对于VM虚拟机的优势十分明显,那就是轻量和高性能和便捷性, 以下部分摘自: KVM and Docker LXC Benchmarking with OpenStack

运行时的性能可以获取极大提升(经典的案例是提升97%)

管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。

敏捷

像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。

灵活

将应用和系统“容器化”,不添加额外的操作系统,

轻量

你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。

便宜

开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。

生态系统

正在越来越受欢迎,只需要看一看Google的趋势就知道了, docker or LXC.

还有不计其数的社区和第三方应用。

云支持

不计其数的云服务提供创建和管理Linux容器框架。

有关Docker性能方面的优势,还可参考此IBM工程师对性能提升的评测,从各个方面比VMs(OS系统级别虚拟化)都有非常大的提升。

Performance Characteristics of VMs vs Docker Containers by Boden Russel (IBM)

Performance characteristics of traditional v ms vs docker containers

有争论的部分

任何项目都会有争论,就像Go,像NodeJS, 同样Docker也有一些。

能否彻底隔离

在超复杂的业务系统中,单OS到底能不能实现彻底隔离,一个程序的崩溃/内存溢出/高CPU占用到底会不会影响到其他容器或者整个系统?很多人对Docker能否在实际的多主机的生产环境中支持关键任务系统还有所怀疑。 注* 就像有人质疑Node.JS单线程快而不稳,无法在复杂场景中应用一样。

不过可喜的是,目前Linux内核已经针对Container做了很多改进,以支持更好的隔离。

GO语言还没有完全成熟

Docker由Go语言开发,但GO语言对大多数开发者来说比较陌生,而且还在不断改进,距离成熟还有一段时间。此半git、半包管理的方式让一些人产生不适。

被私有公司控制

Docker是一家叫Dotcloud的私有公司设计的,公司都是以营利为目的,比如你没有办法使用源代码编绎Docker项目,只能使用黑匣子编出的Docker二进制发行包,未来可能不是完全免费的。 目前Docker已经推出面向公司的企业级服务(咨询、支持和培训)。

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-02-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

OpenStack发布Queens版本,扩展对GPU和容器支持

OpenStack本周发布了第17个代码版本Queens,该版本包含一些重大的更新,例如软件定义存储功能、GPU兼容性以及容器工作负载的跟踪等。Queens不仅...

4266
来自专栏Web 开发

终于弄好了

我从一个只知道Linux的小子,成长为一个能够实际操作、懂得思考问题、解决问题的人

1662
来自专栏Android群英传

调教Android的打盹

952
来自专栏大数据和云计算技术

快速理解docker

image.png 技术源头 简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案,Doc...

42910
来自专栏程序人生 阅读快乐

Docker全攻略

Docker 是一个充满挑战性和趣味性的开源项目,它彻底释放了Linux 虚拟化的威力,极大地缓解了云计算资源供应紧张的局面。与此同时,Docker 也成倍地降...

871
来自专栏宝哥的专栏

Docker系列学习文章 - 什么是docker?(二)

| 导语 前面我们介绍了什么是容器,那么这篇文章我们继续跟大家讲解什么是docker。 docker是目前最火的LXC高级容器引擎,docker到现在几乎是容器...

1.3K24
来自专栏云计算D1net

前方高能!保护Docker容器须知

容器技术(尤其是Docker)正继续以其自有的方式在企业中发展着。它们与其他任何技术一样,IT专业人士们的任务就是为确保Docker容器的安全性而制定出一份策略...

3143
来自专栏SDNLAB

Hyper—基于虚拟化的Docker engine

编者按:毋庸置疑,Docker在开源技术圈里是一个现象级的存在。随着Docker的兴起,整个行业都在经历一场从“虚拟化”到“容器化”的变革,而这个变革实际上是一...

4117
来自专栏aCloudDeveloper

Docker 网络背后的原理探索

知其然而不知其所以然,不知也。老古人说得多好,学知识不懂得知识背后的原理,等于白学。

1260

Docker平台和Moby项目添加Kubernetes

Docker平台正在集成对Kubernetes的支持,以便Docker客户和开发人员可以选择使用Kubernetes和Swarm来编排容器工作负载。点击注册测试...

1908

扫码关注云+社区