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

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. 安装过程复杂
### 回答1: Docker 的 /var/lib/docker/overlay 目录用于存储 Docker 镜像层和数据卷的数据。如果这个目录的空间占用过多,可能是因为有太多的镜像层或数据卷被保留,或者有容器在运行时生成了大量的数据。要减少 /var/lib/docker/overlay 目录的空间占用,可以尝试以下方法: 1. 删除不再使用的镜像: ``` docker image prune ``` 2. 删除不再使用的数据卷: ``` docker volume prune ``` 3. 停止并删除不再使用的容器: ``` docker stop <CONTAINER_ID> docker rm <CONTAINER_ID> ``` 4. 使用 docker-gc 工具来自动清理不再使用的容器、镜像和数据卷: ``` docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc:ro spotify/docker-gc ``` 可以根据自己的情况选择适当的方法来解决空间占用过多的问题。 ### 回答2: docker的/var/lib/docker/overlay/目录是用来存储容器的镜像和数据的,默认情况下,它会占用较多的磁盘空间。 首先,你可以使用docker的清理命令来释放一些不再使用的镜像和容器,以减少磁盘空间的占用。例如,可以使用以下命令来删除所有停止的容器: ``` docker container prune ``` 此外,你还可以删除不再使用的镜像: ``` docker image prune ``` 这些命令会删除停止的容器和未被使用的镜像,从而释放占用的磁盘空间。 另外,你还可以考虑使用docker的卷来存储一些较大的数据,以减少/var/lib/docker/overlay/目录的空间占用。使用docker卷,你可以将容器的数据存储在宿主机的其他位置,从而减少/var/lib/docker/overlay/目录的占用。 首先,你可以创建一个卷: ``` docker volume create my_volume ``` 然后,在运行容器时,将卷挂载到容器的指定目录: ``` docker run -v my_volume:/path/to/mount some_image ``` 这样,容器的数据就会存储在卷中,而不会占用/var/lib/docker/overlay/目录的空间。 最后,你还可以考虑调整docker的存储驱动。默认情况下,docker使用overlay2作为存储驱动,但是这种驱动可能会占用较多的磁盘空间。你可以尝试使用其他的存储驱动,如aufs或btrfs,以减少磁盘空间占用。 总之,通过清理不再使用的镜像和容器、使用docker卷来存储数据,以及调整存储驱动,你可以减少/var/lib/docker/overlay/目录的空间占用。 ### 回答3: 当Docker的/var/lib/docker/overlay目录占用过多空间时,可能是由于以下原因导致的: 1. 镜像和容器积累过多:Docker会保存所有使用过的镜像和容器的数据,并存储在overlay目录中。如果不定期清理过期或不再使用的镜像和容器,会导致该目录占用过多空间。可以使用docker rm和docker rmi命令删除不再需要的容器和镜像。 2. 日志文件过多:Docker的日志文件默认储存在overlay目录下。如果日志文件很大或过多,会占用大量空间。可以在Docker的配置文件中更改日志文件的位置,或者定期删除旧的日志文件。 3. 容器数据持久化:在某些情况下,容器的数据会持久化保存在overlay目录中,如果数据量很大,可能会占用大量空间。可以考虑将数据保存在其他位置,或使用Docker Volume来管理容器的数据。 4. 容器卷未及时清理:如果在容器内使用了数据卷,且没有及时清理不再使用的数据,也会导致overlay目录占用空间过多。可以使用docker volume rm命令删除不再使用的数据卷。 为解决以上问题,可以使用以下方法: 1. 定期清理不再使用的容器和镜像,使用docker rm和docker rmi命令。 2. 定期清理旧的日志文件,可以更改日志文件的位置或定期删除。 3. 考虑将容器的数据保存在其他位置,或使用Docker Volume管理数据。 4. 及时清理不再使用的数据卷,使用docker volume rm命令。 通过上述方法进行合理管理和清理,可以减轻/var/lib/docker/overlay目录占用空间过多的问题,并保持Docker的正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值