Docker是啥?它比虚拟机强在哪里?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker是啥?它比虚拟机强在哪里?相关的知识,希望对你有一定的参考价值。

Docker是一个开源的应用容器引擎,可以让开发者将自身的应用或者软件移植到镜像中,然后发布到任何一个Windows机器或者Linux机器上,当然Docker也可以实现虚拟化。而一个完整的Docker是由:Docker Client客户端,Docker Daemon 守护进程,Docker Image 镜像和Docker Container 容器来组成的。容器是完全采用沙箱机制,相互之间不会有任何接口。
而Docker比虚拟机强大的地方在于:
第一:启动时间:Docker容器是秒级启动的,而虚拟机时分钟级启动,在启动速度方面,Docker就能够完美地碾压了虚拟机。
第二:占用空间和性能:在占用空间和性能方面,Docker容器镜像比虚拟机要小得多且性能要比虚拟机更强。
第三:使用要求:虚拟机是基于硬件的虚拟化,其CPU也要有支持虚拟化的支持,Docker共享宿主机内核,可运行在主流的Linux,不用考虑CPU是否支持虚拟化技术。
参考技术A

Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。它是一个跨平台、可移植并且简单易用的容器解决方案。Docker能在容器内部快速自动化地部署应用,并通过操作系统内核技术(namespaces、cgroups等)为容器提供资源隔离与安全保障。

Docker和虚拟机的对比

1,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。

2.每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

3.而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。

4.Docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动。

5.Docker 需要的资源更少。Docker 在操作系统级别进行虚拟化,Docker 容器和内核交互,几乎没有性能损耗,性能优于通过Hypervisor 层与内核层的虚拟化。

6.容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。

7.容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。

8.容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。

参考技术B 我来换个方式说一下吧。

如果不讲究的话,你把docker近似的看成虚拟机问题也不大。 (刚开始可以不用纠结那些公用内核,系统调用,应用进程之类的)
docker嘛,一个字就是快。两个字就是省心。

你vmware装个centos 要多久,保守估计算上下载系统镜像到安装完也要个20分钟吧。 docker呢,一个docker pull centos 命令, 几秒钟搞定了。 接着连进去随你怎么折腾。

但是,玩是不会赚钱的,得向外提供服务才能赚钱,比如用httpd搭建一个网页服务器。 难不成我还得自己进去配置, no no no ,不用的, 直接在配置文件里写一条命令,或者干脆直接下载一个带http的镜像,多了几十毫秒,就搞定了。 软件再多,也分分钟搞定,再加上k8s这样的管理docker软件。 一个yaml格式的配置文件 加上一条超方便的kubectl apply 命令,几秒钟就可以搭建一个包含超多软件的复杂集群。效率和速度真是让人叹为观止。
因为docker快,现在连解决问题的思路都有一些变化, 比如docker里面的某个httpd服务不可用了,你说东西不能用了得找原因修吧, 但是因为启动一个太快了。 所以干脆先别修,直接在启动一个新的docker,顶上去。 那个坏了的,要么直接扔掉,要么等待白天工作时间载慢慢找原因。

所以docker 比虚拟机,个人感觉就是单个系统启动快,复杂系统配置快,东西坏了直接扔带来的系统恢复速度快。
话说回来,要是真不在意启动时间和运行时间,虚拟机中完整的系统哪点不比docker强?
参考技术C Docker是一个开源的应用容器引擎,可以让开发者将自身的应用或者软件移植到镜像中,然后发布到任何一个Windows机器或者Linux机器上,当然Docker也可以实现虚拟化。

以上是关于Docker是啥?它比虚拟机强在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

虚拟机与Docker有何不同?

docker和VMhyper-V等虚拟机的区别

大厂都在用EhCache,它到底比Redis强在哪里?

大厂都在用EhCache,它到底比Redis强在哪里?

IDEA 集成虚拟机中的 Docker

IDEA 集成虚拟机中的 Docker