什么是容器?

容器是一种操作系统虚拟化技术,内核功能的集合,提供给应用独立的运行环境,并实现资源的控制和隔离。Docker 不等同于容器,容器历史要比Docker 长得多。

容器技术发展历史

1972   UNIX发布了Chroot(Change Root)工具 
2000 FreeBSD发布了Jails,它可以将服务器划分成多个称为Jail的虚拟分区,为⽤用户提供 ⼲干净独立的运⾏行行时环境
2005 SWsoft基于Linux 2.6.15 内核发布了OpenVZ,实现了操作系统层面的虚拟化
2006 Google发布了Process containers进程容器内核补丁,可以隔离进程 的CPU,内存, 磁盘IO,网络IO等资源; 2008更更名为 Cgroup(Control Groups ),Cgroup可以对进 程分组配置,从⽽而可以以组为单位来隔离资源
2008 Linux社区合作开发了LXC (Linux Containers)容器器,利用Namespace来为容器提供 独立的名字空间,包括进程树、网络、用户组及文件系统等,再利用Capabilities限 制容器器内敏敏感系统调⽤用。
2011 CloudFoundry基于LXC构建了Warden容器器(后放弃LXC⾃自自研)
2013 Google开源了了其鼎鼎有名的Borg平台使用的容器技术lmctfy (Let me contain that for you)
2013 DotCloud开源了Docker容器,最初基于LXC构建,定义了Docker分层镜像格式
2014 CoreOS推出了了了RKT(Rocket)容器
2015 OCI (Open Container Initiative)组织成立,旨在推进容器技术的标准化工作
2015 Docker的libcontainer演化出了RunC项目
2016 Docker在架构上分离出了容器器运⾏行行时环境Containered,原数据管理和运行时环境分离
2017 Docker社区开源项目重命名为Moby,基于Moby开源项⽬目构建Docker社区版,在社 区版基础上构建 Docker企业版。从此Docker成为商业产品名字,而原Docker项目化 身Moby继续发展

容器与传统虚拟机的区别

  • 更高效的利用系统资源
  • 一致的运行环境
  • 持续交付和部署
  • 更轻松的迁移
  • 更轻松的维护和扩展

容器相比传统的虚拟机有如下几点优势:

  1. 是容器比虚拟机要小的多,镜像小,传统的一个虚拟机的镜像小的几G,大的上百G,而容器的镜像往往都是几十MB,轻量级的容器镜像意味着可以更方便的进行传输。
  2. 是可以更细粒度的划分CPU和内存等计算资源,虚拟机最小的也是1C1G,而容器可以划分成更小的单位比如 0.1核,128 MiB,非常适用于平时资源使用率不高的业务。因为容器做好了资源的隔离,通过容器在一台机器上混布,可以极大的提高资源利用率,降低成本。
  3. 是容器启动时间比虚拟机要快,虚拟机的启动时间是分钟级的,而容器理论上在1秒之内能启动成百上千个。非常适用于业务量动态变化快的业务。

容器技术改变应用交付,在以前应用程序的交付是通过源码或可执行文件交付,同时必须包含一个如何部署应用程序的说明文档。往往部署一个稍复杂点的程序,都需要两到三天的时间。容器可以将应用程序和依赖环境打包起来,只要应用程序的容器在一个环境运行起来,在其他任何环境下也能运行,从交付代码变成交付容器,从两到三天的时间缩短到5分钟,极大提高交付效率。

Why Docker?Build Once, Run Anywhere

创新性地解决了应用打包和分发技术难题。通过友好的设计和封装,大大降低了容器技术的使用门槛。