随着云原生技术的普及,容器化 已成为现代应用部署的标准方式。openEuler 作为面向数字基础设施的操作系统,原生支持容器技术,并默认集成轻量级容器引擎 iSulad。本章将带你全面了解 openEuler 的容器生态,掌握 iSulad 的使用,并与 Docker 进行对比,助你为云原生环境做好准备。
🌟 本章目标
- 理解容器技术的基本概念与优势
- 了解 iSulad 是什么,以及它与 Docker 的区别
- 安装与配置 iSulad 容器引擎
- 掌握容器镜像管理:拉取、查看、标记、删除
- 管理容器生命周期:创建、启动、停止、删除
- 查看容器日志与状态
- 实战:在 openEuler 上运行 Nginx 容器并对外提供服务
19.1 什么是容器?
容器(Container) 是一种轻量级的虚拟化技术,将应用及其依赖打包在一起,实现"一次构建,随处运行"。
✅ 容器 vs 虚拟机
| 特性 | 虚拟机(VM) | 容器(Container) |
|---|---|---|
| 架构 | 宿主机 → Hypervisor → Guest OS → 应用 | 宿主机 → Docker/iSulad → 容器 → 应用 |
| 资源占用 | 高(每个 VM 有完整 OS) | 低(共享宿主机内核) |
| 启动速度 | 秒级 | 毫秒级 |
| 隔离性 | 强(硬件级隔离) | 中等(进程级隔离) |
| 适用场景 | 多操作系统、强隔离 | 微服务、CI/CD、轻量部署 |
💬 类比:
- 虚拟机 = 每个应用住一栋独栋别墅(成本高)
- 容器 = 每个应用住一个公寓单元(高效、共享基础设施)
19.2 iSulad 简介
iSulad 是华为开源的轻量级容器引擎,专为 openEuler 和边缘计算场景设计。
✅ iSulad 的核心优势
| 特性 | 说明 |
|---|---|
| 轻量 | 二进制仅 10MB 左右,内存占用低 |
| 快速启动 | 启动时间 < 100ms,适合边缘和 Serverless 场景 |
| 兼容 Docker API | 支持 Docker CLI 和镜像格式 |
| 模块化设计 | 可插拔架构,支持 OCI、CRI |
| 安全可信 | 深度集成 SELinux、国密算法 |
✅ iSulad 与 Docker 的关系
| 对比项 | iSulad | Docker |
|---|---|---|
| 开发者 | 华为 | Docker Inc |
| 定位 | 轻量、嵌入式、云原生底座 | 通用、功能丰富 |
| 默认 openEuler | ✅ | ❌(需手动安装) |
| 资源占用 | 极低 | 较高 |
| 社区生态 | 快速增长 | 巨大(Docker Hub) |
💡 在 openEuler 上,iSulad 是推荐的默认容器引擎。
19.3 安装与启动 iSulad
openEuler 22.03 LTS 默认已安装 iSulad,但可能未启用。
检查是否已安装
bash
isula --version
如果未安装:
bash
sudo dnf install -y isulad
启动并启用服务
bash
sudo systemctl start isulad
sudo systemctl enable isulad
验证状态:
bash
systemctl status isulad
配置镜像加速(可选)
编辑配置文件:
bash
sudo mkdir -p /etc/isulad
sudo vim /etc/isulad/daemon.json
内容(使用华为云镜像加速):
json
{
"registry-mirrors": [
"https://<your-mirror>.mirror.swr.myhuaweicloud.com"
],
"log-level": "info"
}
🔗 华为云镜像服务地址需在控制台获取,或使用公共地址。
重启生效:
bash
sudo systemctl restart isulad
19.4 镜像管理
iSulad 使用 isula 命令管理镜像和容器,语法与 Docker 高度兼容。
🔍 查看本地镜像
bash
isula images
初始为空。
📦 拉取镜像
bash
isula pull nginx:alpine
从 Docker Hub 拉取轻量版 Nginx
📋 查看镜像详情
bash
isula images
输出:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx alpine abcdef123456 2 weeks ago 23MB
🏷️ 标记镜像(用于私有仓库)
bash
isula tag nginx:alpine myrepo/nginx:v1
🗑️ 删除镜像
bash
isula rmi myrepo/nginx:v1
# 或
isula image rm nginx:alpine
⚠️ 若有容器正在使用该镜像,需先删除容器。
19.5 容器生命周期管理
▶️ 运行一个容器(isula run)
bash
isula run -d --name mynginx -p 8080:80 nginx:alpine
-d:后台运行(detached)--name:指定容器名-p 8080:80:端口映射(宿主机:容器)nginx:alpine:镜像名
🔍 查看运行中的容器
bash
isula ps
输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abcdef123456 nginx:alpine "nginx -g 'daemon ..." 1 minute ago Up 1 minute 0.0.0.0:8080->80/tcp mynginx
查看所有容器(含已停止):
bash
isula ps -a
⏸️ 停止容器
bash
isula stop mynginx
▶️ 启动已停止的容器
bash
isula start mynginx
🗑️ 删除容器
bash
isula rm mynginx
⚠️ 必须先停止容器才能删除。
🔄 重启容器
bash
isula restart mynginx
19.6 容器操作进阶
📄 查看容器日志
bash
isula logs mynginx
实时跟踪:
bash
isula logs -f mynginx
🖥️ 进入容器(交互式)
bash
isula exec -it mynginx /bin/sh
-i:保持输入-t:分配伪终端/bin/sh:启动 shell
进入后可查看 Nginx 文件:
bash
ls /usr/share/nginx/html
退出:
bash
exit
📊 查看容器资源使用
bash
isula stats mynginx
显示 CPU、内存、网络、磁盘使用情况。
📁 挂载宿主机目录
将宿主机 /data/web 挂载到容器 /usr/share/nginx/html
bash
isula run -d --name myweb -p 8080:80 \
-v /data/web:/usr/share/nginx/html \
nginx:alpine
✅ 实现数据持久化与配置外挂。
19.7 实战:部署一个自定义网页
步骤1:创建网页目录
bash
sudo mkdir -p /data/web
echo "<h1>Hello from openEuler + iSulad!</h1>" | sudo tee /data/web/index.html
步骤2:运行容器并挂载
bash
isula run -d --name hello-web -p 8080:80 \
-v /data/web:/usr/share/nginx/html \
nginx:alpine
步骤3:验证
bash
curl http://localhost:8080
输出:
html
<h1>Hello from openEuler + iSulad!</h1>
浏览器访问 http://虚拟机IP:8080,应看到欢迎页面。
✅ 容器化 Web 服务部署成功!
✅ 本章小结
| 命令 | 用途 | 示例 |
|---|---|---|
isula images |
查看镜像 | |
isula pull |
拉取镜像 | isula pull nginx |
isula run |
运行容器 | -d -p 8080:80 --name web |
isula ps |
查看容器 | -a 查看所有 |
isula stop/start |
控制容器 | isula stop web |
isula rm |
删除容器 | |
isula logs |
查看日志 | -f 实时跟踪 |
isula exec |
进入容器 | -it /bin/sh |
isula stats |
查看资源 | |
-v |
挂载目录 | -v /host:/container |
📝 课后练习
- 拉取
busybox镜像,并运行一个交互式容器执行ls命令。 - 运行一个
alpine容器,后台运行,命名为test-alpine。 - 查看该容器的日志(虽然它不输出日志,观察结果)。
- 停止并删除该容器。
- 创建一个
/data/mysql目录,运行 MySQL 容器并挂载该目录(镜像:mysql:8.0,需设置密码)。 - (挑战)编写一个 Shell 脚本,自动拉取 Nginx 镜像、运行容器、并测试访问。
🔜 下一章预告:第20章《编译与开发环境搭建》
我们将学习:
- 在 openEuler 上安装 GCC、make、cmake 等开发工具
- 编译 C/C++ 程序
- 使用 OBS(openEuler 构建服务)编译 RPM 包
- 安装 Python、Node.js 等语言环境
- 实战:从源码编译并安装一个软件
准备好成为 openEuler 上的开发者了吗?