1. 项目背景与核心思路
在国产化技术栈的部署实践中,我们经常需要基于国产操作系统构建定制化的Docker镜像。Kylin V10作为国产操作系统的代表之一,其官方并未提供预构建的Docker镜像。本文将手把手教你如何从Kylin V10的ISO安装文件出发,构建出可直接使用的Docker镜像。
为什么选择这种方式?主要有三个考量:
- 环境一致性:直接从ISO构建能确保镜像内容与官方发行版完全一致
- 离线部署:特别适合内网等无法连接互联网的环境
- 定制自由:可以在基础镜像中预装所需软件,减少后续容器部署时的依赖问题
注意:本文方法适用于ARM64架构的Kylin-Server-V10-GFB-Release-030版本,其他版本可能需要调整软件包名称
2. 环境准备与ISO处理
2.1 基础环境要求
在开始前,请确保你的构建主机满足以下条件:
- 已安装Docker 20.10.7或更高版本
- 至少有10GB的可用磁盘空间
- 能够以root权限执行命令
- 操作系统架构与目标ISO一致(本文为ARM64)
验证Docker版本:
bash复制docker version --format '{{.Server.Version}}'
2.2 ISO文件处理
首先将Kylin ISO文件上传到构建主机,建议放在/opt目录下。我们使用以下命令挂载ISO:
bash复制mkdir -p /media/kylin-iso
mount -o loop Kylin-Server-V10-GFB-Release-030-ARM64.iso /media/kylin-iso
挂载后检查内容是否完整:
bash复制ls -l /media/kylin-iso/Packages/ | wc -l
正常应该能看到数百个rpm包文件。
3. 构建离线YUM源
3.1 配置本地仓库
创建repo配置文件:
bash复制cat > /etc/yum.repos.d/kylin-local.repo <<EOF
[kylin-local]
name = Kylin Local Repository
baseurl = file:///media/kylin-iso/
gpgcheck = 0
enabled = 1
EOF
关键参数说明:
gpgcheck=0:跳过包签名验证(ISO内可能不含GPG密钥)file://协议:直接访问本地文件系统
3.2 重建YUM缓存
执行以下命令刷新元数据:
bash复制dnf clean all
dnf makecache
验证仓库是否可用:
bash复制dnf repolist enabled
应该能看到kylin-local仓库被列出且状态为可用。
4. 安装最小化系统
4.1 创建安装目录
bash复制mkdir -p /opt/kylin-minimal
目录结构说明:
/opt:通常用于存放第三方软件kylin-minimal:将作为新系统的根目录
4.2 执行最小化安装
使用DNF的--installroot参数指定安装目录:
bash复制dnf groupinstall "Minimal" --installroot /opt/kylin-minimal
安装过程可能需要5-10分钟,取决于磁盘性能。完成后检查:
bash复制du -sh /opt/kylin-minimal
正常大小应在1.5GB-2GB左右。
4.3 验证系统完整性
进入chroot环境检查:
bash复制chroot /opt/kylin-minimal /bin/bash
ls -l /
关键目录检查点:
/bin、/sbin应正确链接到/usr下的对应目录/etc下应包含完整的配置文件/var目录结构完整
5. 构建Docker镜像
5.1 打包系统目录
bash复制tar -C /opt/kylin-minimal -cvpf /opt/kylin-minimal.tar .
打包参数说明:
-C:指定工作目录-cvpf:创建(c)详细(v)保留权限(p)的tar文件(f)
5.2 导入Docker镜像
bash复制cat /opt/kylin-minimal.tar | docker import - kylin-minimal:v10
导入机制解析:
- Docker会解压tar包内容作为镜像的文件系统
- 自动生成镜像配置元数据
- 使用指定的镜像名和标签保存
5.3 验证镜像
查看镜像信息:
bash复制docker inspect kylin-minimal:v10
运行测试容器:
bash复制docker run -it --rm kylin-minimal:v10 /bin/bash
6. 高级配置与优化
6.1 镜像瘦身技巧
原始镜像可能包含不必要的文件,可以在打包前清理:
bash复制chroot /opt/kylin-minimal /bin/bash
dnf clean all
rm -rf /var/cache/dnf/*
exit
6.2 预装常用工具
在chroot环境中安装常用工具:
bash复制chroot /opt/kylin-minimal dnf install -y vim net-tools wget
6.3 配置基础环境
创建/opt/kylin-minimal/etc/docker-init.sh初始化脚本:
bash复制#!/bin/bash
echo "nameserver 8.8.8.8" > /etc/resolv.conf
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
7. 常见问题排查
7.1 软件包依赖问题
若安装时报依赖错误,尝试:
bash复制dnf --installroot /opt/kylin-minimal install --nogpgcheck -y <package>
7.2 镜像运行异常
如果容器无法启动,检查:
- 是否缺少
/bin/bash等基础命令 - 文件权限是否正确(特别是
/dev目录) - 尝试添加
--entrypoint /bin/sh参数
7.3 架构不匹配问题
在x86主机上构建ARM镜像时,需要配置qemu模拟:
bash复制docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
8. 实际应用建议
- 版本管理:建议为不同版本打上清晰标签,如
kylin-minimal:v10-sp3 - 分层构建:在基础镜像上使用Dockerfile构建应用镜像
- 安全扫描:使用
docker scan检查镜像漏洞 - 仓库托管:推送到私有仓库便于团队共享
镜像构建完成后,可以通过以下命令推送到私有仓库:
bash复制docker tag kylin-minimal:v10 registry.example.com/kylin-minimal:v10
docker push registry.example.com/kylin-minimal:v10
我在实际使用中发现,基于ISO构建的镜像比直接从Docker Hub拉取的镜像更加稳定可靠,特别是在国产化环境中。一个实用的技巧是在构建完成后立即运行基础测试,验证网络、时区、语言环境等基础功能是否正常。