制作Docker镜像并启动容器
本节介绍在HCE上制作HCE系统的Docker镜像并启动容器。
约束限制
- 运行容器镜像的HCE系统版本和制作的HCE容器镜像版本须保持一致。
制作镜像归档文件
- 确认repo源配置正常。
请检查默认的/etc/yum.repos.d/hce.repo配置文件中参数是否正确,正确的配置如下。
[base] name=HCE $releasever base baseurl=https://repo.huaweicloud.com/hce/$releasever/os/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.huaweicloud.com/hce/$releasever/os/RPM-GPG-KEY-HCE-2 [updates] name=HCE $releasever updates baseurl=https://repo.huaweicloud.com/hce/$releasever/updates/$basearch/ ......
- 新建临时目录作为Docker镜像的根系统文件,并将软件包安装到临时目录。
rm -rf /tmp/docker_rootfs mkdir -p /tmp/docker_rootfs yum --setopt=install_weak_deps=False --installroot /tmp/docker_rootfs --releasever 2.0 install bash yum coreutils security-tool procps-ng vim-minimal tar findutils filesystem hce-repos hce-rootfiles cronie -y
- 上述操作中的releasever需替换为HCE对应的版本号。
- 也可在此处安装其他所需的软件包,但是要确保/tmp文件下的空间足够。
- chroot进入临时目录,进行如下配置。
chroot /tmp/docker_rootfs
- 使用HCE security-tool.sh关闭不必要服务。
export EULEROS_SECURITY=0 echo "export TMOUT=300" >> /etc/bashrc /usr/sbin/security-tool.sh -d / -c /etc/hce_security/hwsecurity/hce_security_install.conf -u /etc/hce_security/usr-security.conf -l /var/log/hce-security.log -s
执行过程中,有以下错误打印均为正常现象,报错的原因为:
- 缺少服务文件。在chroot文件系统下没有启动服务导致。
- 缺少引导系统的文件/etc/sysconfig/init。工具在系统启动阶段关闭服务,镜像rootfs不涉及系统启动。
- 缺少/proc/sys/kernel/sysrq,这是系统启动后生成的调用节点,在chroot文件系统下不存在。
- 卸载security-tool、cronie、systemd软件包及其依赖软件包。
cp -af /etc/pam.d /etc/pam.d.bak rm -f /etc/yum/protected.d/sudo.conf /etc/yum/protected.d/systemd.conf yum remove -y security-tool cronie systemd rpm -e --nodeps logrotate crontabs rm -rf /etc/pam.d mv /etc/pam.d.bak /etc/pam.d sh -c 'shopt -s globstar; for f in $(ls /**/*.rpmsave); do rm -f $f; done' [ -d /var/lib/dnf ] && rm -rf /var/lib/dnf/* [ -d /var/lib/rpm ] && rm -rf /var/lib/rpm/__db.*
- 移除/boot目录。
rm -rf /boot
- 设置容器镜像语言为en_US。
cd /usr/lib/locale;rm -rf $(ls | grep -v en_US | grep -vw C.utf8 ) rm -rf /usr/share/locale/*
- 移除共享文件 man、doc、info和mime。
rm -rf /usr/share/{man,doc,info,mime}
- 移除缓存日志文件。
rm -rf /etc/ld.so.cache [ -d /var/cache/ldconfig ] && rm -rf /var/cache/ldconfig/* [ -d /var/cache/dnf ] && rm -rf /var/cache/dnf/* [ -d /var/log ] && rm -rf /var/log/*.log
- 移除java安全证书。
rm -rf /etc/pki/ca-trust/extracted/java/cacerts /etc/pki/java/cacerts
- 移除/etc/machine-id。
rm -rf /etc/machine-id
- 移除/etc/mtab。
rm -rf /etc/mtab
- 使用HCE security-tool.sh关闭不必要服务。
- 退出chroot。
exit
- 打包压缩临时目录,生成Docker镜像归档文件hce-docker.x86_64.tar.xz。
- 将镜像归档文件转换为带有layer信息的文件。
上述生成的镜像归档文件没有layer信息,不能使用docker load命令加载镜像。需要用docker import命令先将归档文件生成为镜像,再用docker save命令保存为一个带有layer信息的镜像文件,这样就可以使用docker load命令来加载镜像了。下面以镜像名为my_image,归档文件为docker_save.tar.xz举例。
docker import hce-docker.x86_64.tar.xz my_image:v1 docker save -o docker_save.tar.xz my_image:v1
此时生成的docker_save.tar.xz归档文件就可以用docker load命令来加载镜像。
docker load -i docker_save.tar.xz
使用镜像归档文件启动容器
- 确认repo源配置正常。
请检查默认的/etc/yum.repos.d/hce.repo配置文件中参数是否正确,正确的配置如下。
[base] name=HCE $releasever base baseurl=https://repo.huaweicloud.com/hce/$releasever/os/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.huaweicloud.com/hce/$releasever/os/RPM-GPG-KEY-HCE-2 [updates] name=HCE $releasever updates baseurl=https://repo.huaweicloud.com/hce/$releasever/updates/$basearch/ ......
- 安装docker软件包。
yum install docker -y
- 使用镜像归档文件创建容器镜像。
mv /tmp/docker_rootfs/hce-docker.x86_64.tar.xz . docker import hce-docker.x86_64.tar.xz
执行docker images命令可查看到容器镜像ID为6cfefae3a541。
创建镜像可使用如下命令指定镜像的REPOSITORY和TAG参数。
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
- 在容器中运行镜像bash文件。
运行如下命令后,如果shell视图改变,表示成功进入容器bash。
docker run -it 6cfefae3a541 bash