华为云之使用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登录,快速远程连接上。
ssh root@EIP
5.3 检查云服务器操作系统版本
检查云服务器操作系统版本,当前使用操作系统版本为openEuler 20.03。
[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。
yum install -y iSulad-2.0.0 --nogpgcheck
6.2 备份配置文件
执行以下命令,我们将iSulad的原始配置文件进行备份。
cp /etc/isulad/daemon.json /etc/isulad/daemon.json.origin
6.3 修改配置文件
打开iSulad的配置文件daemon.json,修改其镜像仓库地址。
vim /etc/isulad/daemon.json
将图中部分修改镜像仓库。
"registry-mirrors": [
"hub.oepkgs.net"
]
6.4 安装JSON格式数据处理工具
执行以下命令,安装JSON格式数据处理工具。
yum install -y jq --nogpgcheck
6.5 检查配置文件
执行以下命令,将iSulad配置文件内容daemon.json输出,确保配置正确。
cat /etc/isulad/daemon.json | jq
6.6 重新启动iSulad服务
- 重新启动iSulad服务
systemctl restart isulad
- 检查iSulad服务服务状态
systemctl status isulad
七、使用iSula运行容器
7.1 创建openeuler容器
使用 isula命令创建openeuler容器
isula create -it openeuler/openeuler:20.09
7.2 查看创建容器状态
执行以下命令,查询刚才创建的容器状态。
isula ps
由于容器没有运行,我们可以看到没有在运行的容器。
我们使用isula ps -a
命令,查看宿主机所有容器状态。
isula ps -a
7.3 启动容器
将查看到的容器ID复制后,使用
isula start
命令启动。
isula start c4a
查看当前容器状态
[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。
isula exec -it c4a /bin/bash
八、构建容器镜像
8.1 安装构建工具
安装构建工具,iSula提供了容器镜像构建工具isula-build。
yum --enablerepo update install -y isula-build
8.2 启动isula-build服务
启动isula-build服务
systemctl status isula-build
8.3 安装 runc
isula-build构建Dockerfile内的RUN指令时依赖可执行文件runc,需要执行以下命令在isula-build的运行环境上预装好 runc。
yum install -y docker-runc --nogpgcheck
8.4 构建镜像导入到iSulad
- 创建目录
mkdir test-isula-build && cd test-isula-build
- 编辑dockerfile文件
vim Dockerfile
FROM hub.oepkgs.net/openeuler/openeuler:20.09
COPY hello.sh /usr/bin/
CMD ["sh", "-c", "/usr/bin/hello.sh"]
编辑hello.sh脚本
vim hello.sh
chmod +x hello.sh
开始构建镜像
isula-build ctr-img build -f Dockerfile -o isulad:hello-isula-build:v0.1 .
8.5 查询构建镜像
查询构建镜像。我们使用以下命令。
isula-build ctr-img images
也可以使用isula命令查询
hello-isula-build
8.6 运行镜像
执行以下命令,运行刚构建好的镜像。
isula run hello-isula-build:v0.1
九、测试性能
9.1 测试iSulad的性能
和Docker相比,iSulad是通过C/C++实现的轻量级容器引擎,底噪开销更小,具备更少的资源占用、更快的容器启动速度等优势。接下来的操作将尝试使用iSulad运行多个容器,并与Docker进行对比。
- 依次执行以下命令
cd ~; isula pull openeuler/openeuler:20.09
vim get_time.sh
#!/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个容器,计算所需要消耗的时间。
vim isula_performance.sh
#!/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 isula_performance.sh
9.3 Docker测试结果
由于实验环境时间结束,将官方已经测试好的Docker运行结果贴在下方。将Docker的运行结果与iSulad进行对比,发现iSulad对容器的操作速度更快、性能更好,至此实验全部结束。
十、总结
Docker与iSulad服务使用命令基本相似,也可以单独查询isula命令帮助信息或官方文档,所以对于习惯使用Docker的人来说非常容器上手,并且经测试,iSulad对容器的操作速度更快、性能更好。由于本次官方实验环境限制的实验时间紧张,有兴趣的同学可以自己准备环境上手详细体验一番!
- 点赞
- 收藏
- 关注作者
评论(0)