赞
踩
容器就是一组受到资源限制、彼此间相互隔离的进程。
虚拟化是利用VMM(virtual machine monitor)虚拟机监控程序Hypervisor 模拟物理资源(如CPU、RAM、存储和NIC),将其划分为虚拟资源。之后Hypervisor 将虚拟资源分别划分到虚拟机(VM)中,这样用户就可以使用这些虚拟机,并在其中安装操作系统(OS)和应用。虚拟机是一个物理硬件层抽象,用于将一台服务器变成多台服务器。 管理程序允许多个VM在一台机器上运行。每个VM都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此占用大量空间。而且VM启动也十分缓慢 。
容器则是在操作系统安装容器引擎获取系统资源(如进程树、文件系统、网格线)后,将 资源分割为安全的互相隔离的资源结构。它是一个应用层抽象,用于将代码和依赖资源打包在一起。 多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行 。
个人理解,通俗讲虚拟化是假装有多个主机(是对主机硬件资源的虚拟化),而容器则是同一个主机假装运行多个操作系统(是对操作系统资源的虚拟化)。
继续通俗:容器就是用来装东西的,装的就是相互之间公用资源、但是又相互隔离的线程。
参考下图:
一般所说的容器都指的是Linux容器即LXC,LXC 提供了一个操作系统级的虚拟化环境,可在许多基于 Linux 的系统上安装。其实现的核心技术都由Linux内核本身提供(所以说目前绝大部分的容器都是必须要跑在linux里面的),其中namespace用来做访问隔离(每个容器进程都有自己独立的进程空间,看不到其他进程),cgroups用来做资源限制(cpu、内存、存储、网络的使用限制)。
docker 出现之初,便是采用了 lxc 技术作为 docker 底层,对容器虚拟化的控制。后来随着 docker 的发展,它自己封装了 libcontainer (golang 的库)来实现 Cgroup 和 Namespace 控制,从而消除了对 lxc 的依赖。相较于LXC来说,Docker容器将应用和其依赖环境全部打包到一个单一对象中,在不包含完整的操作系统的情况下就能运行普通应用,更加轻量级,可移植性更好。
运行环境一致: 解决程序运行环境的部署和差别的问题,容器可以确保应用拥有必需的库、依赖项和文件,可以在生产中自如地迁移这些应用,无需担心会出现任何负面影响。
快速响应:可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
程序独立隔离:保证程序之间独立隔离的运行状态,避免资源受其他程序影响。
应用迁移方便:不需要考换运行环境的问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。