内网环境下的电信CTyunOS系统:基于openEuler的Docker-CE离线部署实战 1. 环境分析与准备工作第一次接触电信CTyunOS系统时我发现这个基于openEuler的自研系统文档极其匮乏。在内网环境下部署Docker-CE就像在没有地图的迷宫里找出口。经过几天的摸索我总结出一套可行的方案这里分享给遇到同样困境的同行。首先需要明确的是CTyunOS虽然基于openEuler但它的包管理机制和依赖关系与标准openEuler存在差异。我的解决思路是先在可联网的测试环境中模拟安装收集所有依赖包再迁移到内网环境。这种方法虽然繁琐但在缺乏官方文档的情况下最为可靠。准备阶段需要特别注意确保测试环境与生产环境的系统版本完全一致准备足够大的存储空间存放下载的rpm包建议至少10GB记录所有操作步骤便于在内网环境复现2. 外网环境模拟测试2.1 openEuler基础环境搭建我选择了openEuler-22.03-LTS版本作为测试基准下载地址在官方镜像站。安装时推荐选择标准安装模式这样可以省去后续安装基础工具的时间。不过要注意标准安装会默认创建一个virbr0虚拟网卡这是libvirt创建的默认网络桥接如果不需要可以安全移除。网络配置是个大坑。在VMware中即使安装时正确获取了IP安装完成后仍可能出现网络不通的情况。我的解决方法是完整关闭VMware软件不仅仅是关机重新启动后检查网络配置手动编辑/etc/sysconfig/network-scripts/ifcfg-ens33文件2.2 Docker-CE安装踩坑记录按照常规的Docker安装方法会遇到各种依赖问题。最初我误以为系统基于CentOS8尝试对应方法失败后才意识到需要特殊处理。关键步骤包括# 先安装containerd.io基础包 yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm # 添加Docker官方repo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo然后需要手动修改/etc/yum.repos.d/docker-ce.repo文件将baseurl指向CentOS7的仓库。这个细节很重要因为openEuler的包兼容性更接近CentOS7。3. 依赖包收集与整理3.1 递归下载所有依赖在内网环境安装的最大挑战是解决依赖关系。我采用的方法是# 生成依赖清单 dnf repoquery --installed --qf %{name}.%{arch} --resolve --requires docker-ce deps.list # 批量下载所有依赖包 dnf download --downloaddir/docker_packages $(cat deps.list)通过实践我发现必须包含以下关键包containerd.iodocker-cedocker-ce-clicontainer-selinuxfuse3slirp4netns3.2 包版本匹配技巧版本冲突是最常见的问题。我的经验是先在测试环境用yum安装成功通过rpm -qa | grep 包名查看具体版本确保内网环境安装完全相同的版本特别要注意fuse3和slirp4netns这些容易被忽略的依赖项。我遇到过因为fuse3版本不匹配导致docker无法启动的情况。4. 内网环境部署实战4.1 文件传输与校验将外网下载的包传输到内网时建议使用tar打包压缩保持目录结构校验md5值确保文件完整在内网环境创建相同的目录结构# 打包示例 tar -czvf docker_packages.tar.gz /docker_packages # 解压时保持路径 tar -xzvf docker_packages.tar.gz -C /4.2 离线安装流程在内网环境执行安装时需要进入存放rpm包的目录运行dnf install -y ./*.rpm如果遇到依赖缺失可以通过dnf deplist命令检查缺少的依赖然后从测试环境补充下载。我建议先安装基础依赖再安装docker相关包分阶段进行更容易定位问题。4.3 安装后配置安装完成后还需要启动docker服务systemctl start docker设置开机自启systemctl enable docker验证安装docker run hello-world在内网环境还需要配置镜像加速器如果有内部镜像仓库或者导入基础镜像。我通常会将常用镜像提前导出为tar文件在内网通过docker load命令导入。5. 常见问题解决方案5.1 依赖地狱破解法当遇到复杂的依赖关系时可以采用以下策略使用repoquery --requires --resolve递归查找所有依赖建立本地yum仓库简化安装对冲突的包使用--nodeps选项慎用我曾经为了解决一个依赖问题不得不下载了50多个相关rpm包。这种情况下建立本地仓库是最佳选择。5.2 SELinux相关问题在CTyunOS上SELinux可能导致各种权限问题。如果确认不需要SELinux可以修改/etc/selinux/config文件设置为SELINUXpermissive重启生效不过在生产环境建议保持SELinux启用只针对docker相关策略进行调整。6. 进阶技巧与优化建议6.1 构建本地yum仓库对于需要频繁部署的场景建议搭建本地仓库# 安装createrepo工具 dnf install createrepo # 创建仓库目录结构 mkdir -p /data/repos/docker # 生成仓库元数据 createrepo /data/repos/docker然后创建对应的repo文件指向这个本地路径。这样可以大大简化后续的安装和维护工作。6.2 容器镜像预加载内网环境的另一个挑战是获取基础镜像。我的做法是在外网环境pull所需镜像使用docker save导出为tar文件内网通过docker load导入对于常用镜像如centos、nginx等建议提前准备好多个版本避免每次都要重新传输。7. 系统兼容性深度解析经过多次测试我发现CTyunOS虽然基于openEuler但其内核特性更接近CentOS7。这解释了为什么使用CentOS7的docker包兼容性最好。理解这一点很重要可以避免在后续安装其他软件时走弯路。在性能优化方面建议调整docker存储驱动为overlay2配置合适的日志轮转策略限制容器资源使用特别是在内网环境合理的配置可以避免很多后期运维问题。我通常会创建一个初始化脚本自动完成这些优化设置。