开发者
openEuler操作系统系列课程 基础实验四:iSula轻量级容器技术入门(实践)
openEuler操作系统系列课程 基础实验四:iSula轻量级容器技术入门(实践)
发表于2025/07/15
1020

openEuler操作系统系列课程 基础实验四:iSula轻量级容器技术入门(实践)


本篇博客记录了基于openEuler的iSula轻量级容器技术入门的实验过程,涵盖了容器引擎的安装、容器的构建、删除、运行、导出等相关操作。通过本实验,读者可以了解iSula容器的基本使用方法,掌握在openEuler环境下进行容器管理的核心步骤,并为后续深入学习容器技术打下坚实基础。实验内容包括具体命令的演示、操作流程的详细说明以及常见问题的解决方法,适合初学者参考和实践。


实验环境

项目说明
平台华为ECS云服务器
处理器架构鲲鹏(ARM架构)
操作系统openEuler 22.03
SSH工具MobaXterm
容器工具iSula(Version 2.0.18)

实验准备

安装开发工具

yum group install -y "Development Tools"
yum install -y jq

iSulad 的安装、配置和启动

使用yum工具安装iSulad容器引擎:

yum install -y iSulad

安装完成后进入对应引擎目录,修改配置文件来指定容器镜像的注册地址

cd /etc/isulad/    # 进入路径
cp daemon.json{,.before}    # 备份文件
vim daemon.json     # 修改配置文件

修改内容如下所示:

......
    "registry-mirrors": [
        "hub.oepkgs.net"
    ],
......

hub.oepkgs.net为openEuler社区与中科院软件所共建的、开源免费的容器镜像仓库。在该网站可以搜索到可用于该实验的容器镜像。
检查配置文件格式是否正确(如果配置文件的内容能正确显示出来,即表示其格式合法):

cat /etc/isulad/daemon.json | jq

结果输出如下:

{
  "group": "isula",
  "default-runtime": "lcr",
  "graph": "/var/lib/isulad",
  "state": "/var/run/isulad",
  "engine": "lcr",
  "log-level": "ERROR",
  "pidfile": "/var/run/isulad.pid",
  "log-opts": {
    "log-file-mode": "0600",
    "log-path": "/var/lib/isulad",
    "max-file": "1",
    "max-size": "30KB"
  },
  "log-driver": "stdout",
  "container-log": {
    "driver": "json-file"
  },
  "hook-spec": "/etc/default/isulad/hooks/default.json",
  "start-timeout": "2m",
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ],
  "registry-mirrors": [
    "hub.oepkgs.net"
  ],
  "insecure-registries": [],
  "pod-sandbox-image": "",
  "native.umask": "normal",
  "network-plugin": "",
  "cni-bin-dir": "",
  "cni-conf-dir": "",
  "image-layer-check": false,
  "use-decrypted-key": true,
  "insecure-skip-verify-enforce": false,
  "cri-runtimes": {
    "kata": "io.containerd.kata.v2"
  }
}

重启isulad使配置文件生效:

systemctl restart isulad

查看isulad运行状况

systemctl status isulad

输出为:

● isulad.service - iSulad Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/isulad.service; enabled; vendor preset: disabled)
     Active: active (running) since Mon 2025-07-14 12:17:08 CST; 2min 4s ago
   Main PID: 878 (isulad)
      Tasks: 12 (limit: 42464)
     Memory: 28.4M
     CGroup: /system.slice/isulad.service
             └─ 878 /usr/bin/isulad

Jul 14 12:17:07 ecs-3616-b1cb systemd[1]: Starting iSulad Application Container Engine...
Jul 14 12:17:08 ecs-3616-b1cb isulad[878]:           iSula 20250714041708.315 - iSulad successfully booted in 0.357 s
Jul 14 12:17:08 ecs-3616-b1cb systemd[1]: Started iSulad Application Container Engine.

输出中包含active(running)字样,启动成功,至此isula安装成功,可以进行下一步的实验操作。

一. iSulad容器与镜像管理

使用isula run运行容器busybox:

isula run busybox echo "hello world"

输出为:

hello world

如果是第一次运行,则会有如下的输出(本地没有容器,所以会去远仓拉取):

Unable to find image 'busybox' locally
Image "busybox" pulling
Image "xxxxx(Container ID)" pulled
hello world

查看镜像:

isula images

输出如下所示:

REPOSITORY                     TAG        IMAGE ID             CREATED              SIZE
busybox                        latest     27725c36cdc8         2017-05-13 05:36:57  3.159MB

使用isula run -it命令再次运行容器busybox:

isula run -it busybox

此时会进入容器的命令行交互界面,查看一下系统信息等内容:

/ # uname -a
Linux 1f7b988d40a9 5.10.0-60.139.0.166.oe2203.aarch64 #1 SMP Thu May 30 05:18:35 UTC 2024 aarch64 GNU/Linux

输入exit退出容器
使用-itd参数来后台运行容器:

isula run -itd busybox
7a51c20bee7426ed11bf938841fdfd8dbb8c6077d946bf03f6f2a58f1328e6cd # 返回容器ID

使用容器ID(前12位)作为标识符进入容器内部命令行界面:

[root@ecs-3616-b1cb ~]# isula exec -it 7a51c20bee74
/ # uname -a
Linux 7a51c20bee74 5.10.0-60.139.0.166.oe2203.aarch64 #1 SMP Thu May 30 05:18:35 UTC 2024 aarch64 GNU/Linux

通过isula attach命令接入容器后使用exit指令退出,此时会终止实例运行:

[root@ecs-3616-b1cb ~]# isula attach 7a51c20bee74

/ # exit
[root@ecs-3616-b1cb ~]# isula ps
CONTAINER ID    IMAGE   COMMAND CREATED STATUS  PORTS   NAMES

二. 使用isula-build构建容器镜像

在之前的步骤中,我们使用的容器镜像是从hub.oepkgs.net下载的已经构建好的容器镜像,下面使用iSula提供的容器镜像构建工具isula-build,构建自己的容器镜像并运行。

安装isula-build

首先检查yum源:

yum repolist | grep update

输出为:

[root@ecs-3616-b1cb ~]# yum repolist | grep update
update                                  update
update-source                           update-source

可以发现update的输出,表示update节的enable = 1,符合实验安装需求。
接下来使用yum指令安装isula-build

yum install -y isula-build

isula-build构建Dockerfile内的RUN指令时依赖可执行文件runc,我们可以通过安装docker-runc来获取runc二进制:

yum install -y docker-runc

使用systemctl start命令启动

systemctl start isula-build

使用如下指令查看isula-build的版本,如果有对应输出也表示了安装成功:

isula-build version

个人实验环境下输出如下所示:

Client:
  Version:       0.9.6-13
  Go Version:    go1.17.3
  Git Commit:    de59790
  Built:         Tue Nov  1 08:00:00 2022
  OS/Arch:       linux/arm64

Server:
  Version:       0.9.6-13
  Go Version:    go1.17.3
  Git Commit:    de59790
  Built:         Tue Nov  1 08:00:00 2022
  OS/Arch:       linux/arm64

修改/etc/isula-build/registries.toml,将hub.oepkgs.net加入到isula-build可搜索的镜像仓库列表里:

cp /etc/isula-build/registries.toml{,.before}
vim /etc/isula-build/registries.toml

修改内容如下所示:
修改内容
重启isula-build服务:

systemctl restart isula-build

查看配置:

isula-build info -H

配置输出结果如下图所示:
配置展示
可以看到在Search Registries配置项里看到hub.oepkgs.netisula-buid安装完成。

构建容器镜像并导出到isulad

在接下来的步骤中,我们将构建容器镜像并将其导出到本地isulad容器引擎的存储中。
创建Dockerfile:

whoami # root
mkdir -p ~/iSula/build && cd $_
vim Dockerfile    # 在此编辑文件内容

编辑内容如下:

FROM openeuler/openeuler:24.03
COPY hello.sh /usr/bin/
CMD ["sh", "-c", "/usr/bin/hello.sh"]

编辑在Dockerfile中使用到的hello.sh脚本,它将被加到原有的镜像中以构建出我们自己的镜像:

vim hello.sh

编辑内容如下:

#!/bin/sh
echo "Hello, iSula!"

修改文件属性:

chmod +x hello.sh

用isula-build构建我们自己的容器镜像并导出到isulad,镜像命名为hello-isula-build:v0.1:

isula-build ctr-img build -f ./Dockerfile -o isulad:hello-isula-build:v0.1

构建过程如下图所示:
创建容器.png
查询构建出来的镜像并运行容器:

isula-build ctr-img images

输出结果如下所示:

---------------------------------------  -----------  -----------------  ------------------------  -----------
 REPOSITORY                               TAG          IMAGE ID           CREATED                   SIZE
---------------------------------------  -----------  -----------------  ------------------------  -----------
 hello-isula-build                        v0.1         35158dc3ed53       2025-07-15 13:50:51       210 MB
 hub.oepkgs.net/openeuler/openeuler       24.03        abbe74eca0f8       2025-06-30 08:13:11       210 MB
---------------------------------------  -----------  -----------------  ------------------------  -----------

由于构建过程中使用-o将构建的镜像导出到了本地的isulad的容器引擎中,所以使用isula命令也可以查看和使用刚才创建的容器:

isula images

输出如下所示:

REPOSITORY                     TAG        IMAGE ID             CREATED              SIZE
hello-isula-build              v0.1       35158dc3ed53         2025-07-15 21:50:51  194.640MB
busybox                        latest     27725c36cdc8         2017-05-13 05:36:57  3.159MB

我们使用自己构建出来的容器镜像来运行容器:

[root@ecs-3616-b1cb build]# isula run hello-isula-build:v0.1
Hello, iSula!

输出Hello, iSula!,自己构建的容器运行成功!
至此,实验结束。

实验心得

通过本次实验,我深入了解了 openEuler 环境下 iSula 轻量级容器技术的基本使用方法。从容器引擎的安装与配置,到镜像的拉取、构建、导出及运行,每一步都加深了我对容器技术原理和实际操作流程的理解。尤其是在使用 isula-build 构建自定义镜像并导入到本地 isulad 容器引擎的过程中,体会到了容器技术在软件交付和环境隔离方面的高效与便捷。

实验过程中遇到的配置文件修改、服务重启、权限设置等细节问题,也让我认识到运维工作的严谨性和重要性。通过查阅官方文档和社区资源,逐步解决了遇到的各种小问题,提升了独立解决问题的能力。

总的来说,本次实验不仅掌握了 iSula 的基本操作,还为后续深入学习容器编排、镜像优化等高级内容打下了坚实基础。未来希望能在 openEuler 生态下探索更多容器相关技术,提升自己的系统运维与自动化能力。

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞