Docker是基于Go语言实现云开源项目。它能够对应用组件封装,分发,部署,运行等生命周期的管理。虽Linux容器技术出现解决这样问题,而Docker就是在它的基础上发展过来,将应用运行在Docker容器上,而Docker容器在任何操作系统上都是一致的。这就实现跨平台,跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
就好比如我们有四个环境:redis,mysql,mongoDB,Nginx,把上面四个环境放到4个集装箱里面,构建形成镜像文件,每个集装箱是本地正常运行软件克隆,这4个集装箱放在docker跑,好比图标鲸鱼上面有4个集装箱,而运维直接装docker就是那个鲸鱼,背上有开发的4个环境。一次配置好,大大简化操作。
docker解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
虚拟机:就是带环境安装的一种解决方案,它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统,应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要就删掉,对其他部分毫无影响,这类虚拟机完美运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
虚拟化技术:Linux容器不是模拟一个完整操作系统,而是对进程进行隔离,有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置,系统因此而变得更高效轻量并保证部署在任何环境中的软件都能始终如一地运行
Docker和传统虚拟化方式
1.传统虚拟技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。
2.而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
3.每个容器之间项目隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。
Docker 更轻量,秒级快速启动速度
简单,易用,社区活跃
标准统一打包部署,镜像支持增量分发,易于部署
易于构建,良好rest API 也适合自动化测试和持续集成。
性能尤其是内存和IO开销小
为什么说docker比VM快?
1.docker有着比虚拟机更少的抽象层,由于docker不需要Hyperviosr实现硬件资源虚拟化,运行在docker容器上的程序直接使用都是实际物理机的硬件资源,因此在CPU,内存利用率上docker将会在效率上有明显优势。
docker利于宿主机内核,而不需要Guest OS 。因此当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核,这样避免引寻,加载操作系统内核返回比较费时费资源的过程,当新建一个虚拟机,虚拟机软件需要加载Guest OS返回新建过程是分钟级别,而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。
Docker容器 | VM | |
---|---|---|
操作系统 | 与宿主机共享OS | 宿主机OS上运行虚拟机OS |
存储大小 | 镜像小,便于存储与传输 | 镜像庞大(vmdk,vdi等) |
运行性能 | 几乎无额外性能损失 | 操作系统额外的CPU,内存消耗 |
移植性 | 轻便,灵活,适应于Linux | 笨重,于虚拟化技术耦合高 |
硬件亲和性 | 面向软件开发者 | 面向硬件运维者 |
原文:https://www.cnblogs.com/xujunkai/p/13031176.html