为什么要使用 Docker?
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
- 1 更高效的利用系统资源
- 由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高,无论是应用执行速度,内存消耗以及文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
- 2 更快速的启动时间
- 传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到妙级,甚至毫秒级的启动时间,大大的节约了开发,测试,部署的时间。
- 3 一致的运行环境
- 开发过程中一个常见的问题是环境一致性问题,由于开发环境,测试环境,生产环境不一致,导致有些bug并未在开发过程中被发现,而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。从而不会再出现(这段代码在我机器上运行没问题啊)这类问题。
- 4 持续交付和部署
- 对于开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
- 使用Docker可以通过定制应用镜像来实现持续集成,持续交付,部署。开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署
- 5 更轻松的迁移
- 由于Docker确保了执行环境的一致性,使得应用的迁移更加容易,Docker可以在很多平台上运行,无论是物理机,虚拟机,公有云,私有云,甚至是笔记本,其运行结果是一致的,因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
- 6 更轻松的维护和扩展
- Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单,此外,Docker团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
- 7 更快速的交付和部署
- 对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
- 开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
- 8 更高效的虚拟化
- Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
- 9 更轻松的迁移和扩展
- Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
- 10 更简单的管理
- 使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
对比传统虚拟机总结
虚拟化技术对比:
- KVM:全虚拟化,需要模拟各种硬件(硬件虚拟化)
- docker:严格来说不算是虚拟化技术,只是进程隔离和资源限制(内核虚拟化)
启动进程对比:
- 在kvm虚拟机中执行top命令,看宿主机进程树,根本看不到top的进程
- 在docker容器中,同样执行top命令,在宿主机进程数中直接可以看到top进程
占用内存资源对比:
- KVM虚拟机一般会独占一段内存,即使闲置,其他虚拟机也无法使用。(立即分配)
- 容器可以只有一个内存上限,没有下限。如果它只使用1MB内存,那么它只占用宿主机1MB内存。宿主机可以将富余内存作为他用。(预分配)
内核对比:
- kvm的虚拟机内核无需与宿主机一致
- Docker实例内核和宿主机内核一致
操作系统支持度对比:
- kvm:支持多种操作系统,除了linux,还支持windows,uninx、solaris等
- docker:只支持linux
启动一个实例需要的时间对比:
LXC容器技术将操作系统抽象到了一个新的高度。直接从init启动,省去了硬件自检、grub引导、加载内核、加载驱动等传统启动项目,因此启动飞速。
- docker:秒级
- kvm:分钟级别
镜像模板占用空间对比:
- kvm:占用空间大
- docker:占用空间小
综合来说:docker比kvm更省资源,可以提供非常接近宿主机的性能,而kvm资源隔离比docker更高,kvm支持的操作系统类型更多