容器技术对比(Docker/LXC/LXD/Multipass)

本文探讨了Docker的镜像分层和生态系统,LXC的系统容器角色,LXD的安全性和多功能性,以及Multipass的便捷虚拟机创建。对比了它们的特点、应用和优劣势,适合理解容器技术在不同场景中的选择.

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DockerLXCLXDMultipass
基本介绍为了打破“程序即应用”的观念,通过镜像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. 安装过程复杂
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值