Docker 是什么

Docker是以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。

它是一个跨平台、可移植并且简单易用的容器解决方案。Docker的源代码托管在GitHub上,基于Go语言开发并遵从Apache 2.0协议。

Docker可在容器内部快速自动化地部署应用,并通过操作系统内核技术(namespaces、cgroups等)为容器提供资源隔离与安全保障。

Docker 的发展历程

历史

迭代

展望

Docker 生态

围绕Docker的生态系统自下而上分别覆盖了IaaS层和PaaS层所涉及的各类问题:

包括资源调度、编排、部署、配置管理、网络管理、应用开发和部署平台、应用开发工具、应用服务供应以及大数据分析等云计算相关的服务。

image

优点

除了基于Docker技术解决构建分布式平台无法回避的经典问题,Docker及其生态系统主要带来了以下几点好处。

  • 环境标准化和版本控制。

基于Docker提供的环境一致性和标准化,你可以使用Git等工具对Docker镜像进行版本控制,相比基于代码的版本控制来说,你还能够对整个应用运行环境实现版本控制,一旦出现故障可以快速回滚。

相比以前的虚拟机镜像,Docker压缩和备份速度更快,镜像启动也像启动一个普通进程一样快速。

  • 高资源利用率与隔离。

Docker容器没有管理程序的额外开销,与底层共享操作系统,性能更加优良,系统负载更低,在同等条件下可以运行更多的应用实例,可以更充分地利用系统资源。

同时,Docker拥有不错的资源隔离与限制能力,可以精确地对应用分配CPU、内存等资源,保证了应用间不会相互影响。

  • 容器跨平台性与镜像。

Linux容器虽然早在Linux 2.6版本内核已经存在,但是缺少容器的跨平台性,难以推广。

Docker在原有Linux容器的基础上进行大胆革新,为容器设定了一整套标准化的配置方法,将应用及其依赖的运行环境打包成镜像,真正实现了“构建一次,到处运行”的理念,大大提高了容器的跨平台性。

  • 易于理解且易用。

Docker的英文原意是处理集装箱的码头工人,标志是鲸鱼运送一大堆集装箱,集装箱就是容器,生动好记,易于理解。

一个开发者可以在15分钟之内入门Docker并进行安装和部署,这是容器使用史上的一次飞跃。

因为它的易用性,有更多的人开始关注容器技术,加速了容器标准化的步伐。

  • 应用镜像仓库。

Docker官方构建了一个镜像仓库,组织和管理形式类似于GitHub,其上已累积了成千上万的镜像。

因为Docker的跨平台适配性,相当于为用户提供了一个非常有用的应用商店,所有人都可以自由地下载微服务组件,这为开发者提供了巨大便利。

缺点

对于资源的隔离不够彻底,因为底层原理就是 Linux 的资源调度,有共享的资源。

进化:容器云

容器为用户打开了一扇通往新世界的大门,真正进入这个容器的世界后,却发现新的生态系统如此庞大。

在生产使用中,不论个人还是企业,都会提出更复杂的需求。

这时,我们需要众多跨主机的容器协同工作,需要支持各种类型的工作负载,企业级应用开发更是需要基于容器技术,实现支持多人协作的持续集成、持续交付平台。

即使Docker只需一条命令便可启动一个容器,一旦试图将其推广到软件开发和生产环境中,麻烦便层出不穷,容器相关的网络、存储、集群、高可用等就是不得不面对的问题。从容器到容器云的进化应运而来。

容器云

容器云以容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员提供用于构建、发布和运行分布式应用的平台。

当容器云专注于资源共享与隔离、容器编排与部署时,它更接近传统的IaaS;

当容器云渗透到应用支撑与运行时环境时,它更接近传统的PaaS。

容器云并不仅限于Docker,基于rkt容器的CoreOS项目也是容器云。

Docker的出现让人们意识到了容器的价值,使得一直以来长期存在但并未被重视的轻量级虚拟化技术得到快速的发展和应用。

鉴于Docker的里程碑意义,本书在讨论容器云时,都以分析Docker为支撑技术的容器云为主。

拓展阅读

生命周期管理机制(Application Lifecycle Management,ALM)

参考资料

《Docker:容器与容器云》