OpenEuler自带的iSulad容器引擎,性能表现怎么样?

意外的发现

上一篇文章测完OpenEuler的系统性能后,我就琢磨着装个Docker来跑容器。正准备动手的时候,无意间翻到OpenEuler的官方文档(https://docs.openeuler.org/),看到一个东西------iSulad。

文档上说,这是华为开源的轻量级容器引擎,用C语言写的,比Docker更轻量,启动速度更快。我心想:真有这回事?既然OpenEuler自带这个,那我干脆Docker和iSulad都装上,测测看到底怎么样。

说干就干,这才有了今天这篇体验文章。

OpenEuler的云原生特性

在正式测试之前,先说说为什么OpenEuler会自带iSulad。

OpenEuler的云原生定位

OpenEuler 22.03 LTS从设计之初就专注云原生场景,这不是说说而已,而是体现在很多细节上:

  1. 内核优化:5.10内核针对容器场景做了大量优化,比如cgroup v2支持、容器调度优化等
  2. 轻量化设计:系统自己占用资源少(我上一篇测过,内存占用只有5.2%),给容器留出更多空间
  3. 原生集成iSulad:不需要额外安装,OpenEuler仓库就有iSulad,安装部署非常方便

为什么选择iSulad?

华为开发iSulad有自己的考虑:

  • 性能优先:C语言实现,启动速度快,资源占用少
  • 场景聚焦:专注边缘计算、物联网、5G等资源受限场景
  • 精简设计:去掉了一些复杂功能,保留核心能力
    这个设计理念其实和OpenEuler的定位很契合:在云边端场景提供高性能的容器解决方案。

安装Docker和iSulad

测试嘛,得有对比才有说服力。我决定把Docker和iSulad都装上。

安装Docker

OpenEuler仓库里有Docker,但版本比较老:

bash 复制代码
# dnf安装Docker
sudo dnf install -y docker-engine

# 查看版本
docker --version
# Docker version 18.09.0

18.09.0这个版本确实有点老了,不过用来做对比测试够了。

安装iSulad

iSulad的安装更简单,也是dnf直接装:

bash 复制代码
# 安装iSulad
sudo dnf install -y iSulad

# 查看版本
isula version
# Version: 2.0.18

安装过程中注意到,iSulad会自动安装一些依赖,包括:

  • clibcni(CNI网络插件)
  • lcr(轻量级容器运行时)
  • lxc(Linux容器)
  • lib-shim-v2(容器shim)
    这些都是容器运行的基础组件,OpenEuler的仓库里都有,安装很顺畅。

版本对比

装完后看看两者的版本信息:

bash 复制代码
Docker:
- Version: 18.09.0
- API version: 1.39
- Go version: go1.17.3
- Built: 2024-05-08

iSulad:
- Version: 2.0.18
- Git commit: chbf3711bc84e5f3ef3147b4e15d85888f33cb39
- Built: 2024-03-19T12:14:14
- OCI config: 1.0.1

两个都是2024年的版本,时间上差不多。

守护进程资源对比

装好之后,第一个要看的就是资源占用。毕竟iSulad号称"轻量级",得看看是不是真的轻。

bash 复制代码
# 查看Docker守护进程
ps aux | grep dockerd
# dockerd占用内存:80.5MB (80576 KB)

# 查看iSulad守护进程  
ps aux | grep isulad
# isulad占用内存:32.0MB (32860 KB)

差距很明显:iSulad的守护进程只占Docker的40%!

这个差距主要来自:

  1. 语言差异:C语言 vs Go语言,C更接近底层,内存管理更精细
  2. 功能聚焦:iSulad去掉了Docker的很多复杂功能,只保留核心能力
  3. 架构设计:iSulad的架构更精简
    对于边缘设备或资源受限的环境,这30多MB的差距还是挺可观的。

镜像拉取:第一个坑

测试容器启动速度之前,得先拉个镜像。这里遇到了第一个坑。

Docker拉镜像超时

bash 复制代码
docker pull alpine:latest
# Error: Get "https://registry-1.docker.io/v2/": 
# net/http: request canceled while waiting for connection

Docker Hub在国内访问有问题,这个大家都懂。配置个镜像加速器:

bash 复制代码
# 配置Docker镜像加速
sudo tee /etc/docker/daemon.json <<'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.nju.edu.cn"
  ]
}
EOF

# 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

配置完就能正常拉取了。

iSulad拉镜像:踩了几个坑

iSulad这边问题更多一些:

坑1:镜像名称必须完整

bash 复制代码
# 这样不行
isula pull alpine:latest
# Error: Invalid image name, no host found

# 必须写完整路径
isula pull docker.io/library/alpine:latest

Docker会自动补全docker.io/library/,但iSulad不会,必须写全。这可能是为了更明确的镜像来源管理。

坑2:配置文件字段错误

我一开始照着Docker的配置改iSulad的/etc/isulad/daemon.json,结果服务启动失败:

bash 复制代码
{
    "registry-mirrors": [...],
    "default-namespace": "library"  // ❌ 错误!
}

正确的字段名是default-ns,不是default-namespace!改过来才正常:

bash 复制代码
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io"
    ],
    "default-ns": "library"  // ✅ 正确
}

配好之后,iSulad也能正常拉取镜像了。

经验总结:虽然iSulad兼容Docker镜像,但配置字段和命令参数还是有差异的,迁移时要注意。

容器启动速度对比

镜像拉好了,开始测试容器启动速度。这是iSulad号称的优势,看看实际表现如何。

Docker的启动速度

bash 复制代码
# Docker启动alpine容器,循环10次
for i in {1..10}; do
  time docker run --rm alpine:latest echo "test"
done

测试结果:

  • 第1次:1.117秒
  • 第2次:1.019秒
  • 第3次:0.999秒
  • 第4-6次:约1秒左右
  • 平均时间:约1.0秒

iSulad的启动速度

bash 复制代码
# iSulad启动alpine容器,循环10次  
for i in {1..10}; do
  time isula run --rm alpine:latest echo "test"
done

测试结果:

  • 第1次:0.388秒
  • 第2次:0.355秒
  • 第3次:0.358秒
  • 第4-6次:约0.35秒左右
  • 平均时间:约0.35秒

对比结论

引擎 平均启动时间 速度对比

Docker 1.0秒 基准

iSulad 0.35秒 快2.86倍 🚀

iSulad的启动速度确实快了接近3倍!

这个差距主要来自:

  1. C语言的性能优势:执行效率更高
  2. 精简的启动流程:iSulad的启动链路更短
  3. 轻量级运行时:lcr比Docker的containerd更轻量
    对于需要频繁启动容器的场景(比如Serverless、边缘计算),这个速度优势很明显。

容器资源占用对比

启动速度快是一方面,运行起来占用资源如何呢?

跑同样的nginx容器,看看资源占用:

bash 复制代码
# iSulad的nginx
isula stats --no-stream nginx-isula
# CPU: 0.00%
# 内存: 2.64 MiB / 3.33 GiB (0.08%)

# Docker的nginx
docker stats --no-stream nginx-docker
# CPU: 0.00%
# 内存: 2.63 MiB / 3.33 GiB (0.08%)

容器本身的资源占用基本一致,毕竟跑的是同样的nginx镜像。

但别忘了守护进程的差异:

  • dockerd:80MB
  • isulad:32MB
    加起来的话,iSulad方案整体节省了约50MB内存。

实际应用性能测试

光看启动速度还不够,还得看实际跑服务的性能。我用ab(Apache Bench)工具压测了一下nginx。

测试说明

网络模式的差异:

  • Docker:用端口映射(-p 8080:80),通过bridge网络访问
  • iSulad:用host网络(--net=host),直接使用主机网络
    为什么iSulad用host网络?
    因为iSulad不支持-p参数做端口映射!这是它和Docker的一个重要区别。
    iSulad的定位是轻量级,去掉了很多复杂的网络功能。如果要对外暴露服务,只能:
  1. 用host网络模式(容器直接用主机网络)
  2. 或者配置CNI网络插件(需要额外配置,比较复杂)

Docker的性能表现

bash 复制代码
ab -n 10000 -c 100 http://localhost:8080/

测试结果:

  • QPS:15089.72 [#/sec]
  • 平均响应时间:6.627 ms
  • 总耗时:0.663 秒
  • 传输速率:12496.17 KB/s

iSulad的性能表现

bash 复制代码
ab -n 10000 -c 100 http://localhost:80/

试结果:

  • QPS:32507.01 [#/sec]
  • 平均响应时间:3.076 ms
  • 总耗时:0.308 秒
  • 传输速率:26919.86 KB/s

性能对比

暂时无法在飞书文档外展示此内容

iSulad的性能表现是Docker的2倍多!

需要说明:这个对比不完全公平,因为:

  • Docker用bridge网络+端口映射,多了docker-proxy这一层转发
  • iSulad用host网络,直接访问,没有额外开销
    但这恰恰说明了iSulad的设计理念:用最直接的方式,获得最好的性能。

OpenEuler在云原生场景的优势

测完之后,我对OpenEuler的云原生定位有了更深的理解。

  1. 原生集成,开箱即用

不像其他Linux发行版,需要手动添加仓库才能装Docker。OpenEuler的官方仓库就有iSulad:

bash 复制代码
# 搜索容器相关软件
dnf search container

# 直接安装,无需配置额外源
dnf install -y iSulad

这种原生集成的好处是:

  • 版本匹配:iSulad经过OpenEuler官方测试,兼容性有保障
  • 安装简单:不用折腾,dnf一键装好
  • 生态统一:容器运行时、CNI插件、镜像工具都在官方仓库
  1. 性能优化
    OpenEuler 22.03 LTS的5.10内核针对容器做了很多优化:
  • cgroup v2支持:更好的资源隔离和限制
  • 容器调度优化:减少容器启动的系统开销
  • 网络性能提升:优化了容器网络的数据路径
    从我的测试数据看,这些优化确实有效果:
  • 容器启动快(iSulad 0.35秒)
  • 性能表现好(iSulad 32K QPS)
  • 资源占用低(守护进程只占32MB)
  1. 场景聚焦
    OpenEuler的目标场景很明确:服务器、云、边缘计算。
    iSulad的定位也是如此:
  • ✅ 边缘计算:资源受限,需要轻量级方案
  • ✅ 物联网:设备多,容器启动频繁
  • ✅ 5G MEC:低延迟要求,性能优先
  • ⚠️ 传统应用:如果需要Docker的完整功能,还是用Docker
    这种聚焦的好处是,在特定场景下能做到极致。

总结

这次体验下来,最大的感受是:OpenEuler在云原生方面确实下了功夫。

不是简单地支持容器,而是:

  1. 原生集成iSulad:不用额外折腾,官方仓库直接装
  2. 内核优化:5.10内核针对容器场景做了大量优化
  3. 性能表现:实测数据证明,性能确实不错
    从测试数据看:
  • 守护进程轻量:iSulad只占32MB
  • 启动速度快:容器启动只要0.35秒
  • 性能优秀:应用QPS达到32K
    当然,iSulad也有局限性,比如不支持端口映射、生态不如Docker丰富。但对于边缘计算、物联网、资源受限场景,这些局限往往不是问题,性能和轻量化才是关键。
    如果你正好在用OpenEuler,又需要跑容器,不妨试试iSulad。性能表现可能会让你眼前一亮。
相关推荐
周杰伦_Jay1 小时前
【免费云平台部署指南】按场景选型+全维度对比(附直达地址)
网络·人工智能·架构·开源·云计算
gaize12132 小时前
服务器使用推荐
服务器·云计算
杰克逊的日记3 小时前
业务系统从 AWS 云迁到阿里云,迁移到阿里云
阿里云·云计算·aws
nicepainkiller3 小时前
aws s3 对象存储 上传文件
云计算·aws·s3
AWS官方合作商3 小时前
解锁AWS EC2极致存储性能:全面解析EBS优化实例与IOPS固态硬盘配置
云计算·aws
翼龙云_cloud3 小时前
亚马逊云渠道商:如何3 步实现 AWS RDS 读写分离?
运维·服务器·云计算·php·aws
翼龙云_cloud14 小时前
阿里云渠道商:新手怎么操作阿里云无影云电脑?
运维·服务器·阿里云·云计算·电脑
AKAMAI15 小时前
Akamai 宣布收购功能即服务公司 Fermyon
人工智能·云计算
AI_567819 小时前
Finereport如何重塑数据驱动管理
信息可视化·数据分析·云计算