Container OS镜像

openeuler-container-os镜像简介

当前openEuler Embedded提供了一个专门的Container OS镜像,该镜像专为运行容器而制作, 因此系统底噪较小。生成的zImage的大小约2.9M,rootfs.cpio.gz的大小约为27M(无systemd), 或者36M(有systemd)。 此镜像会集成iSula容器引擎,以及openEuler服务器版本的容器镜像。 用户在启动此镜像并登录进入root用户以后,系统会自动启动openEuler服务器版本的容器, 并进入交互界面。

构建和运行openeuler-container-os镜像 参考视频

运行openeuler-container-os镜像

由于openeuler-container-os镜像中含有容器镜像,因此rootfs解压后的体积约300M,超过了init ramfs的最大限制, 因此,构建生成了一个wic.bz2文件,用户解压后,可以得到一个只有ext4格式文件系统的磁盘镜像文件。 所以,运行的命令会稍有不同:

$ sudo qemu-system-aarch64 -M virt,gic-version=3 -m 1G -cpu cortex-a53 \
  -nographic -smp 4 -kernel zImage -dtb qemu_mcs.dtb -netdev bridge,br=br_qemu,id=net0 \
  -device virtio-net-pci,netdev=net0 \
  -drive file=openeuler-container-os-qemu-aarch64-20240207150042.rootfs.wic,format=raw \
  -append 'root=/dev/vda1 rootfstype=ext4 rw rootwait'

上述命令中,使用了 -netdev-device 参数, 将openEuler Embedded镜像中的网卡设备连接到了宿主机的网桥上。 这样,openEuler Embedded镜像就可以通过宿主机的网桥访问外网了。 -dtb 参数指定了openEuler Embedded镜像中的设备树文件,具体dtb可以通过 -machine dumpdtb=qemu.dtb 命令获取。 如果用户有其他额外的硬件需求,可以使用如下命令将dtb文件转换为可编辑的dts文件:

$ dtc -I dtb -O dts qemu.dtb -o qemu.dts

之后,可以根据自己的需求修改qemu.dts文件,最后再通过如下命令将其转换为dtb文件后使用:

$ dtc -I dts -O dtb qemu.dts -o qemu.dtb

-nographic 参数表示不使用图形界面,而是使用串口终端。 -smp 参数指定了openEuler Embedded镜像中的CPU个数。 -m 参数指定了openEuler Embedded镜像中的内存大小 -drive 参数指定了openEuler Embedded镜像的磁盘文件。 -append 参数指定了openEuler Embedded镜像的内核启动参数。由于此磁盘镜像文件 是一个只有ext4格式文件系统的磁盘镜像文件,因此 root 参数指定了 /dev/vda1, 表示根文件系统在第一个分区, rootfstype 参数指定了 ext4rw 表示读写权限, rootwait 表示等待根文件系统准备好。 -kernel 参数指定了openEuler Embedded镜像中的内核文件。

如果用户希望可以访问互联网,除了使用 -netdev-device 参数将openEuler Embedded镜像中的网卡设备连接到宿主机的网桥上, 还需要在宿主机中配置网桥以及iptables转发规则,并且需要在openEuler Embedded镜像中配置网卡的IP地址和默认网关。 具体的QEMU NAT模式配置,参见 使能互联网

openeuler-container-os镜像启动后,会以root身份自动启动iSula daemon服务端. 在用户以root身份登录进入系统后,如果是第一次启动系统,会加载openEuler服务器版本的容器镜像, 并创建对应版本的容器。之后每次启动系统,都会自动启动并进入已经创建好的容器。

使用openEuler服务器版本镜像

执行如下命令,拉取openEuler服务器版本镜像:

# 拉取openEuler 23.09版本镜像
$ isula pull openeuler/openeuler:23.09
# -net=host 表示使用宿主机的网络
$ isula run -it -net=host openeuler/openeuler:23.09 sh

此时,我们已经运行一个容器镜像,并能通过命令行与之交互。 服务器版本镜像默认含有dnf包管理工具,我们可以通过dnf安装一些软件包。 比如,我们可以通过如下命令安装ping命令:

sh-5.2# dnf install iputils