这里写目录标题
一、容器和虚拟机的差异
1. 传统虚拟机技术
虚拟机是虚拟出一套硬件,在其上面运行一个完整的操作系统,例如我们使用 KVM
,指定系统镜像,然后装系统,最终可以使用,在该系统上再运行所需的应用程序
KVM
创建虚拟机时,指定较少的 CPU、内存、硬盘
等资源、虚拟机性能较低。
2. 容器技术
容器内的应用程序直接运行在宿主机的内核上,容器内没有自己的内核,也没有对硬件进行虚拟,因此容器比起虚拟机更为轻便。
3. 容器对比 KVM 的好处
- 容器能够提供宿主机的性能,而
kvm
虚拟机时分配宿主机硬件资源,性能较弱。 - 同样配置的宿主机,最多可以启动
10个
虚拟机的化,可以启动100+
的容器数量。 - 启动一个
KVM
虚拟机,得有一个完整得开机流程,花费时间较长,或许得20s
,而启动一个容器只需要1s
。 - 容器内的程序,就好比直接运行在宿主机上,但是它们又是隔离的,能够使用宿主机最大的硬件资源。
二、为什么选择 Docker
1. Docker 更高效的利用系统资源
容器不需要进行硬件虚拟化以及一个完整操作系统的额外开销,docker
对系统资源的利用率更高,无论是应用执行,文件存储,还是在内存消耗等方面,都比传统虚拟机更高效。因此一个同样配置的主机,可以运行处更多数量的容器实例。
2. 更快的启动时间
传统的虚拟机启动时间较久,docker
容器直接运行在宿主机的内核上,无须启动一个完整的操作系统,因此可以达到秒级启动,大大的解决开发,测试,部署的时间。
3. 一致性的环境
在企业里,程序从开发环境,到测试服务器,到生产环境,难以保证机器环境一致性,极大可能出现系统依赖冲突,导致难以部署等 Bug
。
然而利用 docker
的容器 - 镜像技术,提供了除了内核之外完整的运行的环境,保证了应用环境的一致性。
4. 持续交付和部署
- 一致性环境,对于开发和运维的人员,最希望的就是环境部署迁移别处的问题,利用
docker
可以定制镜像,以达到持续集成,持续交付和部署; - 通过
Dockerfile
来进行镜像构建,实现系统集成测试,运维进行生产环境的部署; - 且
Dockerfile
可以使镜像构建透明化,方便技术团队能够快速理解运行环境部署流程;
5. 更轻松的迁移
Docker
可以在很多平台运行,物理是物理机,虚拟机,云服务器等环境,运行结果都是一致的。用于可以轻松的将一个平台的应用,迁移到另一个平台,而不用担心环境的变化,导致程序无法运行。
6. Docker 能做什么
- 可以把应用程序代码及运行依赖环境打包成镜像,作为交付介质,在各环境部署;
- 可以将
镜像(image)
启动成为容器(container)
,并且提供多容器的生命周期进行管理(启、停、删); container
容器之间相互隔离,且每个容器可以设置资源限额;- 提供轻量级虚拟化功能,容器就是宿主机中的一个个的虚拟的空间,彼此相互隔离,完全独立;
三、Docker 使用情况
Google
从 2004
年器就已经开始使用容器技术了,并于 2006
年发布了 Cgroups
和 Imctfy
项目。Imctfy
是 Google
开源版本的容器栈,它提供了用来代替 LXC
的 Linux
应用容器。
Google
云平台的高级软件工程师 Joe Beda
于 2014
年在 Gluecon
上做了一个关于 Google
如何使用 Linux
容器技术的报告。报告中声称限制 Google 所有的应用都是运行在容器中的。Google
每周要启动超过 20亿
个容器,每秒钟要启动超过 3000
个容器,这还不包括那些长期运行的容器。Google
同样也正在将容器集成到 Google
云平台中。
Google
在 2014
你那推出了开源容器集群管理系统 --Kubernetes
,Kubernetes
就构建在 Docker(容器化)
之上。