虚拟机与容器(Vm、lxc、lxd、Docker)
什么是虚拟机
虚拟机(Vm)是计算机系统的仿真。简而言之,它可以在实际上是一台计算机的硬件上运行看起来很多单独的计算机。虚拟的是操作系统层,但是因为在虚拟操作系统过程中在Host OS和Guest OS直接加入了一个虚拟层,导致资源消耗比较大。但是Vm目前也有优点:因为虚拟化已经成熟,具有广泛的工具和生态系统,以及支持其在各种环境中部署,对于需非linux操作系统或特定内核虚拟化的工作方式任然是唯一的方法。
什么是容器
容器位于物理服务器及其主机操作系统之上 - 通常是Linux或Windows。每个容器共享主机操作系统内核,通常也包括二进制文件和库。共享组件是只读的。共享操作系统资源(如库)可以显着减少重现操作系统代码的需要,并且意味着服务器可以通过单个操作系统安装来运行多个工作负载。因此容器非常轻 - 它们只有几兆字节,只需几秒钟即可启动。
与容器相比,Vm需要几分钟才能运行,并且比同等容器大一个数量级。与Vm相比,容器所需的全部功能都足以支持程序和库以及运行特定程序的系统资源。实际上,这意味着您可以将容器上的应用程序的容量设置为使用容器的两到三倍,而不是使用Vm。此外,使用容器,您可以为开发,测试和部署创建可移植,一致的操作环境。
容器的类型
lxc
lxc虚拟的是操作系统层,lxc起源于linux内核中的cgroup和namespace的开发,以支持轻量级虚拟化操作系统环境(容器)。lxc是一种操作系统级别的轻量级linux容器,而docker则相当于是一个应用程序级别的容器。这是两者最主要的不同点。相比于docker容器的操作系统模板简化为单个应用程序环境,没有守护程序,syslog,不能运行多个应用程序,lxc容器则更像一个原生,完整的linux系统。lxc本质上是集合了linux系统具有所有虚拟化特性的一个用于管理容器的命令行工具。相当于是用linux的底层技术作为支撑,整合这些底层特性,做成一个命令行工具。
lxc支持嵌套。lxc里面继续安装lxc。
安全方面:采用seccomp来隔离潜在危险的系统调用;采用AppArmor来对mount, socket, ptrace和文件访问提供额外的限制,特别是限制跨容器通信;采用Capabilities来阻止容器加载内核模块,修改主机系统时间等等;采用CGroups限制资源使用,防止针对主机的DoS攻击等。
存储后端也可以是btrfs, lvm, overlayfs, zfs等。
提供基于C语言的API。
缺点:无法有效支持跨主机之间的容器迁移,管理复杂。
lxd
lxd是对lxc的改进版本,主要改进如下:
lxc只是单机的命令行工具,没有daemon进程,所以它无法提供REST API,也无法有效支持跨主机之间的容器迁移。
LXC的命令也太底层,普通用户无法理解,用户使用困难。lxd再进行了一次封装,使得使用更加方便。
LXD作为一个daemon进程弥补了上述问题,让LXC更易用。
Docker
lxd侧重于在在容器里运行系统容器(即容器里运行的是完整的操作系统),所以它将lxc里面侧重于安全的技术也都重新包装后暴露出来,Docker侧重于在容器里运行单一的普通应用,更加重视应用的管理。
Docker一开始是基于lxc项目来创建单个应用程序容器,但是现在Docker已经开发出了他们自己核心namespace和cgroup工具:libcontainer。
Docker容器技术容器技术都是基于底层镜像构建的,镜像的改动会被划分成一层一层的结构,在每层的改动必须要进行提交保留,否则对于容器的修改只是暂时的。
Dockerfile是一个告诉Docker如何从镜像用特定的应用程序来创建容器的脚本。跟使用特定的安装好的应用程序通过bash脚本来创建一个LXC容器相似。
智能云网
智能云网社区是华为专为开发者打造的“学习、开发、验证、交流”一站式支持与服务平台,该平台涵盖多领域知识。目前承载了云园区网络,云广域网络,数通网络开放可编程,超融合数据中心网络,数通网络设备开放社区共五个场景。为了响应广大开发者需求,还提供了开发者交流、API 体验中心、多媒体课件、SDK工具包、开发者工具以及远程实验室共六大工具,让开发者轻松开发。欢迎各位前来体验。
- 点赞
- 收藏
- 关注作者
评论(0)