华为云之使用iSula生态链进行容器镜像构建和运行【玩转华为云】

一、本次实践介绍

1.1 实践环境简介

1.本次实践环境使用华为KooLabs云实验平台。

2.本次实践基于华为云ECS弹性云服务器。

3.使用iSula生态链进行容器镜像构建和运行。

1.3 本次实践完成目标

  • 使用iSulad运行容器,了解和掌握iSulad容器引擎基本操作指令。
  • 使用isula-build构建容器镜像,了解和掌握isula-build进行容器镜像的构建。
  • iSulad与docker性能对比, 感受到相比于docker,iSulad在性能上的优势。。

二、 相关服务介绍

2.1 华为云ECS云服务器介绍

弹性云服务器(Elastic Cloud Server, ECS)是一种云上可随时自助获取、可弹性伸缩的计算服务,可帮助您打造安全、可靠、灵活、高效的应用环境。

2.2 iSulad介绍

iSulad是华为公司推出的一款容器技术。它是一种轻量级的虚拟化技术,允许用户在独立的运行环境中部署和运行应用程序。iSulad使用Linux容器技术,通过隔离进程、文件系统、网络和其他系统资源来实现应用程序之间的隔离。

三、环境准备工作

3.1 预置实验环境

1.开始实验之前请点击手册上方"预置实验环境"按钮。

2.预置实验环境约等待2分钟左右。环境预置会生成虚拟私有云、安全组以及一台鲲鹏架构的弹性云服务器。

3.2 查看预置环境信息

预置成功后ECS资源用户、密码信息可点击预置环境信息查看。

四、访问ECS云服务器

4.1 登录华为云

进入【实验操作桌面】,打开Chrome浏览器,首次可自动登录并进入华为云控制台页面。

登录完毕后,进入华为云控制台管理首页。

4.2 查看云服务器状态

在华为云的首页服务列表中,点击"弹性云服务器ECS",进入ECS云服务器管理页面,查看云服务器状态。

五、登录云服务器

5.1 复制弹性公网IP地址

在ECS云服务器列表,我们可以看到实验系统为我们创建一台鲲鹏架构的弹性云服务器, 复制ECS弹性云服务器的弹性公网IP地址。

5.2 远程连接接ECS服务器

打开桌面的Xfce终端,进行SSH登录。这里由于实验环境设置的随机密码过于复杂,非常不友好且无权限重置密码,在Xfce终端中逐个敲密码和粘贴密码都错误及卡住不动,浪费大量时间。建议直接使用本地电脑的Xshell登录,快速远程连接上。

bash 复制代码
ssh root@EIP

5.3 检查云服务器操作系统版本

检查云服务器操作系统版本,当前使用操作系统版本为openEuler 20.03。

bash 复制代码
[root@ecs-isula ~]# cat /etc/os-release
NAME="openEuler"
VERSION="20.03 (LTS)"
ID="openEuler"
VERSION_ID="20.03"
PRETTY_NAME="openEuler 20.03 (LTS)"
ANSI_COLOR="0;31"

六、安装及配置iSulad

6.1 安装iSulad

直接执行以下命令,安装iSulad。

bash 复制代码
yum install -y iSulad-2.0.0 --nogpgcheck

6.2 备份配置文件

执行以下命令,我们将iSulad的原始配置文件进行备份。

bash 复制代码
cp /etc/isulad/daemon.json /etc/isulad/daemon.json.origin

6.3 修改配置文件

打开iSulad的配置文件daemon.json,修改其镜像仓库地址。

bash 复制代码
vim /etc/isulad/daemon.json

将图中部分修改镜像仓库。

bash 复制代码
 "registry-mirrors": [
             "hub.oepkgs.net"
    ]

6.4 安装JSON格式数据处理工具

执行以下命令,安装JSON格式数据处理工具。

bash 复制代码
yum install -y jq --nogpgcheck

6.5 检查配置文件

执行以下命令,将iSulad配置文件内容daemon.json输出,确保配置正确。

bash 复制代码
cat /etc/isulad/daemon.json | jq

6.6 重新启动iSulad服务

  • 重新启动iSulad服务
bash 复制代码
systemctl restart isulad
  • 检查iSulad服务服务状态
bash 复制代码
systemctl status isulad

七、使用iSula运行容器

7.1 创建openeuler容器

使用 isula命令创建openeuler容器

bash 复制代码
 isula create -it openeuler/openeuler:20.09

7.2 查看创建容器状态

执行以下命令,查询刚才创建的容器状态。

bash 复制代码
isula ps

由于容器没有运行,我们可以看到没有在运行的容器。

我们使用isula ps -a命令,查看宿主机所有容器状态。

bash 复制代码
isula ps -a

7.3 启动容器

将查看到的容器ID复制后,使用isula start命令启动。

bash 复制代码
 isula start c4a

查看当前容器状态

bash 复制代码
[root@ecs-isula ~]# isula  ps
CONTAINER ID	IMAGE                    	COMMAND    	CREATED      	STATUS           	PORTS	NAMES
c4a63da78bd7	openeuler/openeuler:20.09	"/bin/bash"	6 minutes ago	Up About a minute	     	c4a63da78bd787a2f198382cccedb7bd37f713db169ef99dbc6045a146ae29a4

7.4 查看容器内系统版本

执行以下命令进入容器内,查看系统版本为20.09,而宿主机版本为20.03。

bash 复制代码
isula  exec -it c4a /bin/bash

八、构建容器镜像

8.1 安装构建工具

安装构建工具,iSula提供了容器镜像构建工具isula-build。

bash 复制代码
yum --enablerepo update install -y isula-build

8.2 启动isula-build服务

启动isula-build服务

bash 复制代码
systemctl status isula-build

8.3 安装 runc

isula-build构建Dockerfile内的RUN指令时依赖可执行文件runc,需要执行以下命令在isula-build的运行环境上预装好 runc。

bash 复制代码
yum install -y docker-runc --nogpgcheck

8.4 构建镜像导入到iSulad

  • 创建目录
bash 复制代码
mkdir test-isula-build && cd test-isula-build
  • 编辑dockerfile文件
bash 复制代码
vim Dockerfile
bash 复制代码
FROM hub.oepkgs.net/openeuler/openeuler:20.09
COPY hello.sh /usr/bin/
CMD ["sh", "-c", "/usr/bin/hello.sh"]

编辑hello.sh脚本

bash 复制代码
vim hello.sh
bash 复制代码
chmod +x hello.sh

开始构建镜像

bash 复制代码
isula-build ctr-img build -f Dockerfile -o isulad:hello-isula-build:v0.1 .

8.5 查询构建镜像

查询构建镜像。我们使用以下命令。

bash 复制代码
isula-build ctr-img images

也可以使用isula命令查询

bash 复制代码
hello-isula-build

8.6 运行镜像

执行以下命令,运行刚构建好的镜像。

bash 复制代码
isula run hello-isula-build:v0.1

九、测试性能

9.1 测试iSulad的性能

和Docker相比,iSulad是通过C/C++实现的轻量级容器引擎,底噪开销更小,具备更少的资源占用、更快的容器启动速度等优势。接下来的操作将尝试使用iSulad运行多个容器,并与Docker进行对比。

  • 依次执行以下命令
bash 复制代码
cd ~; isula pull openeuler/openeuler:20.09
bash 复制代码
vim get_time.sh
bash 复制代码
#!/bin/bash

function getTiming() {
    local start=$1
    local end=$2

    local start_s=$(echo $start | cut -d '.' -f 1 | tr -d -c '0-9 n')
    local start_ns=$(echo $start | cut -d '.' -f 2 | tr -d -c '0-9 n')

    local end_s=$(echo $end | cut -d '.' -f 1 | tr -d -c '0-9 n')	
    local end_ns=$(echo $end | cut -d '.' -f 2 | tr -d -c '0-9 n')

    while [ $(echo ${start_ns:0:1}) == 0 ]
    do
        start_ns=$(echo ${start_ns#*0})
    done

    while [ $(echo ${end_ns:0:1}) == 0 ]
    do
        end_ns=$(echo ${end_ns#*0})
    done

    local sum_start_ms=$(($start_s*1000+$start_ns/1000000))
    local sum_end_ms=$(($end_s*1000+$end_ns/1000000))
    time=$(($sum_end_ms-$sum_start_ms))

    echo "${time}"
}

说明:本脚本将并发创建、启动、停止、删除100个容器,计算所需要消耗的时间。

bash 复制代码
vim isula_performance.sh
bash 复制代码
#!/bin/bash

source ./get_time.sh

container_num=100
image=openeuler/openeuler:20.09
client=isula

function create_containers() {
	t1=$(date +%s.%N)
	for i in $(seq 1 $container_num)
	do
		$client create --name container${i} --net none ${image} &
	done
	wait

	t2=$(date +%s.%N)
	create_time=$(getTiming ${t1} ${t2})
}

function start_containers() {
    t1=$(date +%s.%N)
    for i in $(seq 1 $container_num)
    do
        $client start container${i} &
    done
    wait

    t2=$(date +%s.%N)
    start_time=$(getTiming ${t1} ${t2})
}

function stop_containers() {
    t1=$(date +%s.%N)
    for i in $(seq 1 $container_num)
    do
        $client stop -t 0 container${i} &
    done
    wait

    t2=$(date +%s.%N)
    stop_time=$(getTiming ${t1} ${t2})
}

function remove_containers() {
    t1=$(date +%s.%N)
    for i in $(seq 1 $container_num)
    do
        $client rm container${i} &
    done
    wait

    t2=$(date +%s.%N)
    remove_time=$(getTiming ${t1} ${t2})
}

create_containers
sleep 3
start_containers
sleep 3
stop_containers
sleep 3
remove_containers

echo "Sum time of create $container_num containers: ${create_time}ms"
echo "Sum time of start $container_num containers: ${start_time}ms"
echo "Sum time of stop $container_num containers: ${stop_time}ms"
echo "Sum time of remove $container_num containers: ${remove_time}ms"

9.2 执行测试脚本

该脚本会依次并发创建、启动、停止、删除100个容器,并在运行过程中输出容器的ID、Name等信息,在最后该脚本还会输出执行的时间,执行完毕如下图所示。

bash 复制代码
bash isula_performance.sh

9.3 Docker测试结果

由于实验环境时间结束,将官方已经测试好的Docker运行结果贴在下方。将Docker的运行结果与iSulad进行对比,发现iSulad对容器的操作速度更快、性能更好,至此实验全部结束。

十、总结

Docker与iSulad服务使用命令基本相似,也可以单独查询isula命令帮助信息或官方文档,所以对于习惯使用Docker的人来说非常容器上手,并且经测试,iSulad对容器的操作速度更快、性能更好。由于本次官方实验环境限制的实验时间紧张,有兴趣的同学可以自己准备环境上手详细体验一番!

相关推荐
longerxin20206 天前
suse15 sp1使用华为云软件源yum源zypper源
华为云
skd89996 天前
华为云搭建云端IPPBX并实现分机互相通话详细教程
华为云
九河云7 天前
广东省数字化补贴政策助力企业转型升级
重构·华为云·云计算·制造
uesowys9 天前
华为云 对象存储服务 OBS | 架构分析与应用场景
华为云·云计算·对象存储服务
九河云13 天前
工业软件的破局与重构:从技术依赖到自主创新的未来路径
人工智能·重构·华为云·云计算·制造
码农翻身15 天前
用了Cline和华为云的大模型,再也回不去了
华为云·deepseek·cline
江湖有缘16 天前
华为云之MySQL数据的导入导出实践【玩转华为云】
数据库·mysql·华为云
loveking619 天前
SpringBoot调用华为云短信实现发短信功能
java·spring boot·华为云