Docker | LXC | LXD | Multipass | |
---|---|---|---|---|
基本介绍 | 为了打破“程序即应用”的观念,通过镜像imges将作业系统核心除外,运作应用程序所需的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨运作,属于应用容器 | 全称Linux Containers,是一种基于容器的操作系统层级的虚拟化技术,属于系统容器 | 是下一代系统容器和虚拟机管理器,本身基于镜像,提供了许多Linux发行版镜像。LXC提供一套完整的底层工具库集来创建和管理容器,但是使用起来不方便,加上技术升级,需要对老版容器向后兼容,使得LXC无法默认开启某些安全功能,需要手动开启。LXD就是用来解决这些问题,作为LXC的长期运行守护进程 | 在本地通过multipass命令创建Ubuntu虚拟机,并可以通过cloud-init来进行初始化 |
实现原理 | 基于Namespace进行系统的资源隔离,基于Cgroups进行容器资源的限制,基于Union File System实现镜像的分层管理,减少资源消耗。Docker前期使用LXC技术来实现,后面使用golang编写自己的libcontainer库实现 | 在资源管理方面依赖于Cgroups子系统,在隔离控制方面依赖于Namespace特性,通过Chroots技术实现根目录的变换。对比Docker,缺少了镜像的分层管理 | 实现原理和LXC相同,本身不属于一种新的容器技术,而是作为LXC的长期运行守护进程,底层实现依靠LXC | 底层依靠LXD和qemu来实现 |
特点 | 1. 镜像文件分层共享,开启容器只在最上一层提供初始层(用于设置容器的环境)和读写层(对容器内文件的修改都将保存在这一层) 2. 维持容器的运行必须要有一个前台进程,如果该前台进程被销毁,则整个容器将关闭 3. 支持多种存储后端 |
1. 维持容器的运行不需要有前台进程,开启过程类似于虚拟机,直接通过模板镜像创建一个容器 2. 非特权容器(细粒度的权限控制):通过uid和gid的映射来为容器分配uid和gid的范围,如果容器内部出现严重错误,攻击者逃离容器,在服务器上最多只能拥有和普通用户一样多的权限(第一个实现该功能的容器技术) |
1. 作为LXC的长期守护进程,LXC拥有的特点,LXD都拥有。 2. 安全性比LXC更高,包含身份认证等 3. 不仅能够实现容器,还可以实现虚拟机(qemu),都可以通过文件来进行配置 4. 支持多种存储后端 5. 支持通过配置文件的形式来创建容器(支持动态应用) |
1. 提出主实例概念,默认名称为primary的虚拟机就是主实例(只能有一个),当命令不指定虚拟机时,默认为主实例 2. 提出alias概念,可以在服务器上创建命令连接到虚拟机中的命令 |
应用 | 由于Docker存在以上特点,所以一般关注于临时的、无状态的、最小化容器上面,对于容器的修改一般不会升级或重新配置,而是整个被替换掉。容器内只能有一个前台进程,所以一个容器代表着一个应用程序 | LXC不像Docker容器一样需要一个前台进程,所以着重于系统容器(基础设施容器),一个LXC容器上运行一个完整的Linux系统,长期运行,所以可以作为一台轻量级的虚拟机 | 应用场景于LXC相同 | 目前找不到应用场景 |
优势 | 1. 镜像分层共享,节省资源 2. 镜像生态丰富 3. 遵循OCI标准,所有的容器运行时能够运行Docker制作出来的镜像,其他镜像制作软件制作的镜像都能在Docker上运行 |
1. 不需要前台程序,一个容器内可以运行多个应用程序,支持长期运行 2. 在安全性上优于Docker 3. 提供丰富的功能(发送信号,监控状态) |
1. 镜像生态丰富 2. 支持本地和远程访问 3. 命令直观清晰 4. 提供日志、操作和声明周期事件 5. 提供恢复和备份(快照) 6. 使用CRIU实现实时迁移 7. 高级资源控制(CPU、内存、网络、块设备、磁盘使用和内核资源) 8. 支持设备直通 |
1. 启动虚拟机方便,只需一个命令 2. 无需特权指令 |
劣势 | 1. 运行Docker命令必须要有特级权限 2. 无法动态对容器的资源进行限制 3. 本身无法实现动态迁移,需要依靠CRIU,但是热迁移对于Docker来说并不重要,只需要关闭容器,在其他服务器重启一个就行 |
1. 可以创建非特权容器意味着一些常见的操作是不允许的(大多数文件系统的挂载、创建设备节点、对映射集以外的uid/gid的任何操作 2. 无法实现资源动态限制 3. 无法实现容器动态迁移 |
虚拟机功能略显鸡肋(qemu性能低下) | 1. 只能创建Ubuntu虚拟机或者基于Ubuntu的应用程序 2. 镜像稀少 3. 命令反应迟钝 4. 性能低下 |
备注 | 通过apt安装只能使用低版本 | 1. 安装过程复杂,使用apt安装只能使用低版本,使用snap可以安装高版本,但是国内无代理 2. 开启一个ubuntu 20.04虚拟机的时间大概在1分18秒,速度比较快,但是开启完后有一段时间内没有ipv4 |
1. multipass network命令通过LXD来获取网络接口 2. 开启一个ubuntu 20.04容器的时间大概在1分50秒 3. 可以使用libvirt作为运行驱动,以提供更多的虚拟机控制 4. 安装过程复杂 |
文章来源地址https://www.toymoban.com/news/detail-454673.html
文章来源:https://www.toymoban.com/news/detail-454673.html
到了这里,关于容器技术对比(Docker/LXC/LXD/Multipass)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!