从零开始:在无网络环境下制作你的专属CentOS 7 Docker镜像
在容器化开发中,我们习惯了docker pull一键获取镜像。但当面对内网隔离、离线部署或追求极致安全可控的场景时,如何不依赖任何外部网络,从零开始打造一个纯净的Docker基础镜像,就成了一项必备技能。
本文将完整复盘一次实战过程:在一台完全无法连接互联网的CentOS 7服务器上,仅凭一份系统安装ISO,从零构建一个可运行、可定制、可迁移的Docker基础镜像
缘起:当docker pull失效之后
想象一下,你接手了一台“与世隔绝”的服务器,它没有配置任何YUM源,也无法访问Docker Hub。你的任务是在这台机器上部署一套应用,而这套应用依赖于Docker容器。
官方镜像拉不下来,怎么办?
最直接的思路是:既然有CentOS 7的安装ISO,里面包含了所有必需的RPM包,我们能不能利用它来“手搓”一个基础镜像?
答案是肯定的。整个过程可以分为三个核心阶段:
- 构建根文件系统(Rootfs):在宿主机上,利用ISO里的RPM包,“安装”一个最小化的CentOS系统到一个指定目录。
- 打包并导入Docker:将这个目录打包成tar文件,并让Docker将其识别为一个镜像。
- 验证与迁移:运行测试,并将其导出,以便在其他离线机器上使用。
第一阶段:无中生有,构建根文件系统
这一步是整个流程的核心。我们将使用yum的一个强大参数–installroot,它允许我们将软件包安装到指定的目录,而不是当前系统。
准备工作
1、挂载ISO:首先,将你的CentOS 7 ISO镜像挂载到宿主机。
mkdir -p /media/cdrom
mount -o loop /path/to/CentOS-7-x86_64-DVD.iso /media/cdrom
需要将 /path/to 替换为你自己的iso安装包所在目录
2、配置本地YUM源:为了让yum知道从哪里获取RPM包,我们需要创建一个指向ISO挂载点的仓库配置文件。
# 创建配置文件
cat > /etc/yum.repos.d/local-iso.repo << 'EOF'
[local-iso]
name=Local ISO Repository
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
EOF
# 清理yum缓存
yum clean all
执行安装
接下来,我们选择一个目录作为新系统的“家”,并使用yum将核心软件包“安装”进去。
# 1. 创建工作目录
mkdir -p /root/my-docker-root
# 2. 执行安装
# 这条命令会从local-iso源下载filesystem, bash, yum等核心包,并解压到 /root/my-docker-root 目录中
yum install --releasever=7 \
--disablerepo=\* \
--enablerepo=local-iso \
--installroot=/root/my-docker-root \
-y \
filesystem centos-release yum bash glibc coreutils
执行完毕后,/root/my-docker-root目录下就拥有了一个完整的、最小化的CentOS 7文件系统结构,包括/bin, /etc, /usr等目录。
第二阶段:打包与“点石成金”
现在我们有了一个根文件系统,下一步就是让它被Docker识别。
打包根文件系统
使用tar命令将目录打包。这里强烈建议使用–numeric-owner参数,以保留文件的原始用户和组ID(如root为0),避免在不同系统间迁移时出现权限问题。
cd /root/my-docker-root
tar --numeric-owner -cvpf /root/centos7-base.tar .
导入Docker
最后,使用docker import命令,将这个tar包“点石成金”,变成一个真正的Docker镜像。
cd /root
cat centos7-base.tar | docker import - my-centos7-base:v1.0
第三阶段:验证、迁移与总结
验证镜像
运行一个容器,检验我们的劳动成果。
docker run -it my-centos7-base:v1.0 /bin/bash
进入容器后,你可以尝试运行ls, cat /etc/redhat-release等命令,一个纯净的CentOS 7环境已经准备就绪。
镜像迁移
这个镜像是完全独立的,可以轻松地迁移到其他任何Docker环境。
1、导出:在源机器上使用docker save将镜像保存为文件。
docker save -o my-centos7-base.tar my-centos7-base:v1.0
2、传输:通过U盘或内网文件共享,将tar文件复制到目标机器。
3、导入:在目标机器上使用docker load加载镜像。
docker load -i my-centos7-base.tar
结语
通过以上步骤,我们成功地摆脱了对网络和官方源的依赖,从零构建了一个完全可控的Docker基础镜像。这种方法虽然步骤稍多,但它带来了几个关键优势:
- 完全离线:适用于任何高安全级别的内网环境。
- 极致纯净:镜像中只包含你明确安装的内容,没有多余的软件包或潜在风险。
- 高度定制:你可以在构建根文件系统时,加入任何你需要的RPM包,打造出最适合你业务的“黄金镜像”。
更多推荐

所有评论(0)