共计 1427 个字符,预计需要花费 4 分钟才能阅读完成。
容器的诞生
在传统的软件部署形式中,程序员须要把要公布的应用程序打成包发给运维人员,而后由运维人员在生产环境进行部署。当随着利用的版本迭代越来越多,利用的依赖库版本盘根错节,往往会呈现开发环境和生产环境不统一的状况产生,而且因为少数状况下采纳微服务的架构,每个团队都有可能应用不同版本的依赖库,并有可能在降级的时候替换掉他们,因此同一个应用程序采纳雷同版本的依赖库是如许的重要。
当应用程序比拟少或者都是一些单体利用的时候,能够利用虚拟机来隔离每个服务,通过虚拟机的虚拟化技术来为每个应用程序提供不同的运行环境。然而当拆分为微服务之后,每个服务会变的小而多,这个时候如果为每个应用程序调配一个虚拟机,资源消耗是相当多的,然而每个虚拟机上运行多个微服务又会产生依赖库版本的问题,如果有一种起到相似虚拟机隔离作用,然而老本比虚拟机低很多的技术该有多好?
容器技术
得益于 linux 的容器技术,古代开发者曾经由传统的虚拟机形式转向 linux 容器技术。容器相似虚拟机,但比虚拟机开销要小的多,并且同样把每个利用都隔离开来。容器技术容许你在同一台服务器上运行多个服务,而且还能够依据每个服务提供不同的运行环境。
虚拟机中的过程运行在虚拟机的操作系统中,而运行在容器中的过程理论是运行在宿主机的操作系统中,只是外表看来如同运行在容器的沙盒一样,但实际上的确是和其余过程互相隔离的。
linux 之所以能实现容器这种性能,得益于它的命名空间和控制组。linux 命名空间时每个过程互相隔离,只能看到它本人的系统资源,例如:文件,过程,网络等,而 linux 的控制组技术可能限度每个过程能够应用的资源的最大量。一个技术进行隔离,一个技术进行限度,这就导致了容器技术要比虚拟机要灵便的多。
虚拟机和容器
一个虚拟机的失常运行,须要运行本人的一系列零碎过程,只是这些零碎过程就消耗了大量资源。容器和虚拟机相比拟就显得轻量的多,它容许在雷同配置的硬件根底上运行更多数量的利用。尽管容器自身也有耗费,然而和虚拟机零碎的耗费比起来要小的多。
虚拟机是利用软件技术将物理硬件虚拟化为多个虚构硬件资源,从而被每个虚拟机的操作系统应用。虚拟机里的过程会进行虚拟机的零碎调用,虚拟机的指令会通过软件技术变为宿主机上真正的 cpu 指令,而容器中的过程执行的指令不须要任何的虚拟化过程,间接会被 cpu 执行,所以单纯在执行指令的过程中,虚拟机要比容器的执行过程要长,资源消耗要多。
docker 介绍
Docker 是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的镜像中,而后公布到任何风行的 Linux 或 Windows 机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口
Docker 容器平台的呈现把 linxu 容器化技术推向了一个低潮,它不仅简化了程序部署的形式,更简化了打包利用和依赖,使容器真正做到了在不同的操作系统之间移植,甚至一个残缺的操作系统也能够被打包成一个可移植的镜像。
运行 docker 包的前提是,指标机器肯定要运行 docker。
当你的利用被打包成 docker 镜像之后,无论在什么操作系统中运行,它都能看见雷同的文件,雷同的依赖库,因为这些依赖库曾经被一起打包到了 docker 镜像中,即便指标机器上装置了正确的版本的依赖库,它也会只用镜像中的依赖库,这就是程序员期盼的无论何时何地的环境一致性呀
更多精彩文章
- 分布式大并发系列
- 架构设计系列
- 趣学算法和数据结构系列
- 设计模式系列