1.概述
近几年来Docker开始大行其道,很多互联网关系开始跟风构建docker+微服务的架构体系。然而许多人根本不了它,
docker是可以把linux按照名空间划分容器工具,每个容器只是个空间,里面需要运行什么东西,由镜像决定。
2.物理机 VS 虚拟机 VS 容器
2.1物理机
物理机就像是一座别墅,有独立的地基,独立的花园,独立的庭院。
2.2 虚拟机:
虚拟机就像是一套楼房,共享地基,共享花园,共享庭院。
虚拟机非常重,构建速度慢,且占用资源多,一台物理机上只能起十来个虚拟机
2.3 容器:
容器就像是太空舱,每套房间可放置多个太空胶囊,共享地基,共享花园,共享庭院、共享厨房、共享洗手间。
专业的说法就是,容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在任何地方以相同的方式运行。
容器之间共享同一套操作系统资源的,由于容器是共享主操作系统的内核,因此就无法在服务器上运行与主服务器不同的操作系统,也就是说不能在Linux的服务器上运行Windows。虚拟机相对于容器非常重,构建速度慢,且占用资源多,一台物理机上只能起十来个虚拟机
3. 容器的优势
3.1 隔离强
**过去:**一个项目要上线通常地步骤是这样地,找一台线上服务器,拷贝一个tomcat,然后改端口号,然后部署应用到webapps文件夹下,重启就好。
这么做的缺点?
应用之间相互影响,一个应用出现问题,该应用把线程池给拖垮了,这个服务器上的其他应用一起凉凉。
一个大型应用拆分为几十个微服务,分别交由不同的团队开发,不同团队之间水平参差不齐。如果还采用这种部署方式,你的应用和某个坑爹团队的应用部署在了同一台服务器上结果会被坑惨。
现在: 用上docker容器后,Docker可以将我们的应用程序打包封装到一个容器中,该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必需的资源。
容器间达到进程级别的隔离,容器中的操作,不会影响道宿主机和其他容器,这样就不会出现应用之间相互影响的情形!
3.2 . 可移植性
docker容器,可实现开发、测试和生产环境的统一化和标准化。镜像作为标准的交付件,可在开发、测试和生产环境上以容器来运行,最终实现三套环境上的应用以及运行所依赖内容的完全一致。
过去
现在微服务的架构中,一个应用拆成几十个微服务,每个微服务都对应有开发、测试、生产三套环境需要搭建。,如果采用传统的部署方式,有多少环境需要部署。有的公司部署一个个项目的时候,要花整整一个礼拜来搭建环境,简直是惨不忍睹!
现在
和虚拟机相比,容器仅需要封装应用和应用需要的依赖文件,实现轻量的应用运行环境,且拥有比虚拟机更高的硬件资源利用率。
在微服务架构中,有些服务负载压力大,需要以集群部署,可能要部署几十台机器上,某些中小型公司来说,使用虚拟机,代价太大。
如果用容器,同样的物理机则能支持上千个容器,对中小型公司来说,省钱!
对于传统应用来说,使用和不使用Docker可能并不能直接给企业带来好处,相反使用中遇到了问题肯定会给企业带来麻烦,对于传统企业来说,不要盲目跟风,VM虚拟机其实够用了!。