第19章:openEuler 中的容器支持(Docker 与 iSulad)

随着云原生技术的普及,容器化 已成为现代应用部署的标准方式。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、国密算法

🔗 官网:https://isula.linuxcontainers.org

✅ 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

📝 课后练习

  1. 拉取 busybox 镜像,并运行一个交互式容器执行 ls 命令。
  2. 运行一个 alpine 容器,后台运行,命名为 test-alpine
  3. 查看该容器的日志(虽然它不输出日志,观察结果)。
  4. 停止并删除该容器。
  5. 创建一个 /data/mysql 目录,运行 MySQL 容器并挂载该目录(镜像:mysql:8.0,需设置密码)。
  6. (挑战)编写一个 Shell 脚本,自动拉取 Nginx 镜像、运行容器、并测试访问。

🔜 下一章预告:第20章《编译与开发环境搭建》

我们将学习:

  • 在 openEuler 上安装 GCC、make、cmake 等开发工具
  • 编译 C/C++ 程序
  • 使用 OBS(openEuler 构建服务)编译 RPM 包
  • 安装 Python、Node.js 等语言环境
  • 实战:从源码编译并安装一个软件

准备好成为 openEuler 上的开发者了吗?

相关推荐
胶水代码2 小时前
软件开发之DevOps
运维·devops
智能运维指南2 小时前
信创背景下,国产 DevOps 选型的价值跃迁路径设计(2026)
运维·devops
生活予甜2 小时前
2026年算法备案办理服务优选服务商口碑解读
大数据·运维·人工智能
jiayong232 小时前
流程设计器技术选型评估报告
运维·ubuntu·流程引擎
AI-小柒2 小时前
OpenClaw技术深度解析:从智能助手到自动化引擎的范式革命(附DataEyes实战)
大数据·运维·开发语言·人工智能·python·http·自动化
springfancy20133 小时前
数字化运维实践:如何构建全场景、智能化的设备管理系统?
运维·设备管理系统·设备维保管理系统·设备运维管理系统·设备保养管理系统
白白白飘3 小时前
在 Windows 上安装 Docker 及验证
windows·docker·容器
自在极意功。3 小时前
k8s实战
云原生·容器·kubernetes
邓草3 小时前
phpStudy v8.1 离线版一键安装包(小皮面板)
运维·服务器·mysql