docker和虚拟机的区别

传统的虚拟化技术,也就是常用的虚拟机,是指在Linux上通过安装虚拟化软件,来安装虚拟机系统,大致如图

Linux容器(LXC),LXC是非常轻量级的,它将VM的进程也伪装成host的进程,大致如下

传统虚拟机技术是模拟出一套硬件之后在其上运行一个完整的操作系统,在该系统上再运行所需应用进程。

容器内的应用进程直接运行宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比虚拟机更为轻便。

*Linux容器功能是基于cgroups和Namespace来实现的所以要了解Linux容器必须先了解cgroups和Namespace。

*cgroups是将任意进程进行分组化管理的Linux内核功能,可以有效隔离各类进程,同时还可以控制进程的资源占用(CPU、内存等)情况。

*Namespace可以让每个进程有独立的PID、IPC和网络空间。

Docker引擎利用容器来运行、隔离各个应用,容器是镜像创建是应用实例,可以创建、启动、停止、删除容器,各个容器之间是相互隔离的互不影响。Docker镜像类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。镜像(Image)和容器(Container)的关系就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。

下图是docker官网的图,可以看到虚拟化技术通过Hypervisor(虚拟机管理系统)为每个app启动一个Guest OS(客户机操作系统),也就是为每个app启动一个虚拟机。比较直观地说,vm通过Hypervisor对硬件资源进行虚拟化,而docker直接使用硬件资源,利用率上来看docker明显更具有优势。容器隔离的粒度更加小一点,而且多个容器之间是共用同一套操作系统资源的。

这里写图片描述

  

你可能感兴趣的:(知识学习)