简介
Docker是一种容器技术。 所谓容器技术,就是将应用程序及其所需要的环境打包在一起, 并可以与外界隔离开来。Docker 又在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。是不是听起来Docker就好像是一个虚拟机——有自己的系统、网络、进程等等, 两者都实现了与外界的隔离(两个虚拟机之间互不干扰)。其实虚拟机技术很早就存在了,既然两者功能差不多, 为什么我们不直接使用虚拟机而要使用Docker容器呢?
Docker和虚拟机的比较
占用资源
虚拟机(ubuntu 16.04),如下所示, 可以看到直接从官网上下载下来的ubuntu 16.04镜像的大小:
其实不难从上面两幅图中看到, 虚拟机所占的资源是非常庞大的, 而且这还是没有安装python环境及软件依赖的库。 你可以打开自己的资源管理器, 看看如果像虚拟机这样分配资源, 你的电脑上最多能运行多少台虚拟机, 再想想如果考虑上你计算机的处理能力, 又能运行几台虚拟机(我以前的计算机是8 G内存,8个逻辑处理器,但是最多只能跑两台虚拟机, 而且计算机卡顿)?
Docker 可以看到整个Ubuntu环境不过是353 MB, 而且在其运行的时候只是相当于一个程序在跑,比虚拟机所占用的内存资源小得多得多。因此, 在同一硬件条件下,相较于虚拟机, 可以运行几倍乃至几十倍数量的Docker
运行与维护
虚拟机: 虚拟机的运行需要你自己去运行相应的软件, 有时候会很麻烦,而且当虚拟机出现问题时,我们可能需要重新安装虚拟机
Docker: 一个Docker容器几乎只做一件事, 当你运行该容器的时候就会自动运行相应的程序内容, 运行容器只需要一行命令而已。 Docker容器出现问题时,我们只需要删除该容器并重新运行一个Docker容器
总结
(1) 轻量级: 在同一硬件条件下,相较于虚拟机, 可以运行几倍乃至几十倍数量的Docker
(2) 资源利用率提高: Docker容器无需包含虚拟机中一些与我们运行程序无关的内容(如:图形界面, 一些其他的系统文件等)
(3) 运行与维护: Docker 相较于 虚拟机 的运行更简单, 出现问题时的维护也更加容易
(4) Docker的特性(镜像可以“继承”自其他镜像、仓库)导致它们非常适合在连续集成和连续交付(CI/CD) 管道中使用,更适合采用敏捷和DevOps实践的开发团队
|