什么是容器?
在计算机领域中,容器是软件的标准单元,用于打包代码及其依赖项。以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。
简单来说,容器就是一个装应用软件地箱子,里面除了软件代码还包含软件运行时所需地依赖库和配置。在开发流程中极大地解决了我们在运行软件时的底层环境不一致的问题,从而提高我们的工作效率。
容器与虚拟化的区别
虚拟化:虚拟化技术就是将物理机的物理资源转变成逻辑资源(虚拟机),例如:VMware、KVM技术。基于物理机的OS上,在完整的模拟出一套虚拟环境,包括我们的cpu,内存,硬盘,网卡等资源都是虚拟出来的;
正因为这样,我们的虚拟机与虚拟机之间是完全隔离的,,也就是说一台虚拟机上运行的进程与其他虚拟机上运行的进程是互不干扰的,所以隔离性也是虚拟化所追求的一个目标。
容器:容器其实也是虚拟化技术的一种,但是它与完整虚拟化不同的是。我们的容器是不能单独运行在物理机上的,因为它没有完全模拟我们的操作系统。只是对进程进行隔离;
或者说,在正常进程的外面套了一个保护层,对于容器里的进程而言,进程接触到的各种资源都是虚拟的,从而实现与底层系统的隔离.
对于虚拟化来说存在的几个缺点:
资源占用多:我们的虚拟机会占用一部分的内存和硬盘空间,在它运行时,其他程序就不能使用这些资源了。打个比方来说,哪怕虚拟机里的软件,真正运行时所需内存只有1MB,虚拟机依然有有可能需要几百MB的内存才能运行。冗余步骤多:虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。启动慢:简单来说,启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。
相比于虚拟机,容器的优势:启动快:容器里面的应用,对于我们的底层操作系统来说就是一个进程,而不是虚拟机内部的进程;所以启功我们的容器就就相当于启动本机的一个进程,而不是启功一个操作系统,速度就快很多。资源占用少:我们的容器都是基于最小化的镜像实现的(这个后面我们会说),所以容器内部只会包含实现我们需求的一个最“简洁”代码量,无关紧要的软件或程序不会被打包到容器里;
而虚拟机是一个完整的操作系统,它会占用不必要的物理机资源,多个容器可以共享资源,虚拟机都是独享资源。体积小:容器只要包含用到的组件或软件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。简化部署(这个真的香!):容器技术可以将应用打包成单一地址访问的、Registry存储的、 仅通过一行命令就可以部署完整的组件或软件。易于迁移:容器技术的目的就是为了实现的不同主机上运行服务提供一个轻便,一致的格式。容器概念就是缩减项目的交付周期,允许用户方便的对工作负载进行迁移,避免局限于单一的平台提供商。