意外的发现
上一篇文章测完OpenEuler的系统性能后,我就琢磨着装个Docker来跑容器。正准备动手的时候,无意间翻到OpenEuler的官方文档(https://docs.openeuler.org/),看到一个东西------iSulad。
文档上说,这是华为开源的轻量级容器引擎,用C语言写的,比Docker更轻量,启动速度更快。我心想:真有这回事?既然OpenEuler自带这个,那我干脆Docker和iSulad都装上,测测看到底怎么样。
说干就干,这才有了今天这篇体验文章。
OpenEuler的云原生特性
在正式测试之前,先说说为什么OpenEuler会自带iSulad。
OpenEuler的云原生定位
OpenEuler 22.03 LTS从设计之初就专注云原生场景,这不是说说而已,而是体现在很多细节上:
- 内核优化:5.10内核针对容器场景做了大量优化,比如cgroup v2支持、容器调度优化等
- 轻量化设计:系统自己占用资源少(我上一篇测过,内存占用只有5.2%),给容器留出更多空间
- 原生集成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%!
这个差距主要来自:
- 语言差异:C语言 vs Go语言,C更接近底层,内存管理更精细
- 功能聚焦:iSulad去掉了Docker的很多复杂功能,只保留核心能力
- 架构设计: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倍!
这个差距主要来自:
- C语言的性能优势:执行效率更高
- 精简的启动流程:iSulad的启动链路更短
- 轻量级运行时: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的定位是轻量级,去掉了很多复杂的网络功能。如果要对外暴露服务,只能:
- 用host网络模式(容器直接用主机网络)
- 或者配置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的云原生定位有了更深的理解。
- 原生集成,开箱即用
不像其他Linux发行版,需要手动添加仓库才能装Docker。OpenEuler的官方仓库就有iSulad:
bash
# 搜索容器相关软件
dnf search container
# 直接安装,无需配置额外源
dnf install -y iSulad
这种原生集成的好处是:
- 版本匹配:iSulad经过OpenEuler官方测试,兼容性有保障
- 安装简单:不用折腾,dnf一键装好
- 生态统一:容器运行时、CNI插件、镜像工具都在官方仓库
- 性能优化
OpenEuler 22.03 LTS的5.10内核针对容器做了很多优化:
- cgroup v2支持:更好的资源隔离和限制
- 容器调度优化:减少容器启动的系统开销
- 网络性能提升:优化了容器网络的数据路径
从我的测试数据看,这些优化确实有效果: - 容器启动快(iSulad 0.35秒)
- 性能表现好(iSulad 32K QPS)
- 资源占用低(守护进程只占32MB)
- 场景聚焦
OpenEuler的目标场景很明确:服务器、云、边缘计算。
iSulad的定位也是如此:
- ✅ 边缘计算:资源受限,需要轻量级方案
- ✅ 物联网:设备多,容器启动频繁
- ✅ 5G MEC:低延迟要求,性能优先
- ⚠️ 传统应用:如果需要Docker的完整功能,还是用Docker
这种聚焦的好处是,在特定场景下能做到极致。
总结
这次体验下来,最大的感受是:OpenEuler在云原生方面确实下了功夫。
不是简单地支持容器,而是:
- 原生集成iSulad:不用额外折腾,官方仓库直接装
- 内核优化:5.10内核针对容器场景做了大量优化
- 性能表现:实测数据证明,性能确实不错
从测试数据看:
- 守护进程轻量:iSulad只占32MB
- 启动速度快:容器启动只要0.35秒
- 性能优秀:应用QPS达到32K
当然,iSulad也有局限性,比如不支持端口映射、生态不如Docker丰富。但对于边缘计算、物联网、资源受限场景,这些局限往往不是问题,性能和轻量化才是关键。
如果你正好在用OpenEuler,又需要跑容器,不妨试试iSulad。性能表现可能会让你眼前一亮。