在实际项目开发和运维中,我们经常需要基于特定环境定制软件栈。如果每次都从零开始配置,不仅效率低下,也容易因环境差异导致“在我机器上能跑”的问题。Docker 通过镜像和容器技术,提供了一种标准化的环境打包和分发方式。对于熟悉 CentOS/RedHat 生态的开发者而言,Yum 仓库是安装和管理软件包的核心工具。将这两者结合,意味着我们可以在容器内快速搭建一个与生产环境一致的、带有自定义软件仓库的标准化运行环境。本文面向需要在容器内使用 Yum 安装软件,或希望从零开始定制一个包含特定服务的 Docker 镜像的开发者。我们将从最基础的 Docker 镜像定制讲起,逐步深入到如何在容器内部配置 Yum 仓库,并最终完成一个服务(如 Nginx)的安装与部署。整个过程将遵循“概念 - 环境 - 实现 - 验证 - 排错”的路径,确保每一步都可操作、可验证。通过本文,你将掌握从编写 Dockerfile 到构建、运行、验证一个定制化服务镜像的完整流程,并能处理在此过程中遇到的常见问题。1. 理解 Docker 镜像、容器与 Yum 仓库的关系在动手之前,必须厘清几个核心概念及其在本文场景下的相互作用,这是避免后续操作混乱的基础。1.1 Docker 镜像:不可变的模板Docker 镜像是一个只读的模板,它包含了运行一个应用所需的文件系统、依赖库、环境变量和启动参数等。你可以把它理解为一个应用程序的“安装包”或“系统快照”。镜像是分层的,每一层代表 Dockerfile 中的一条指令。这种分层结构使得镜像可以高效地复用和分发。例如,一个基于centos:7的镜像,其底层是 CentOS 7 操作系统的文件系统层,我们在其上安装 Nginx 的操作会生成新的一层。1.2 Docker 容器:镜像的运行实例容器是镜像的一个运行实例。当你使用docker run命令时,Docker 引擎会从镜像创建一个可写的容器层(通常称为“容器层”),然后在其上启动进程。所有对运行中容器的文件修改(如创建新文件、安装软件)都发生在这个可写的容器层。一旦容器被删除,这个可写层也会被丢弃,除非你通过docker commit将其保存为新的镜像。因此,在容器内直接安装软件是一种临时性的、实验性的做法。1.3 Yum 仓库:容器内的软件源Yum 是 RedHat/CentOS/Fedora 等系统的包管理器。Yum 仓库是一个存储了大量 RPM 软件包及其元数据(如依赖关系)的服务器或本地目录。在容器内配置 Yum 仓库,本质上是告诉容器里的 Yum 工具:“当你需要安装软件时,去这里找”。在 Docker 环境中,我们通常希望镜像本身就已配置好正确的仓库,这样基于该镜像启动的任何容器,都具备快速安装软件的能力。1.4 定制镜像 vs. 容器内操作这是本文的两个核心操作模式,目的不同:定制镜像(通过 Dockerfile):目的是创建一个可重复使用、可分享的标准化环境。所有安装和配置步骤在构建镜像时完成,并固化到镜像层中。这是生产环境推荐的做法。容器内操作(通过docker exec):目的是对正在运行的容器进行临时调试、测试或快速验证。这些更改会随着容器的消亡而消失,除非提交为新镜像。本文将重点介绍通过 Dockerfile 定制镜像的标准流程,同时也会演示如何在运行中的容器内进行操作,以便于理解和调试。2. 环境准备与 Docker 安装在开始定制镜像前,你需要一个可用的 Docker 环境。以下步骤以 CentOS 7.x 系统为例,其他 Linux 发行版的安装命令略有不同。2.1 系统与内核要求Docker 对 Linux 内核版本有要求。首先检查你的系统环境。# 1. 检查内核版本,要求 3.10 以上 uname -r # 输出类似:3.10.0-1160.el7.x86_64 # 2. 检查系统版本 cat /etc/redhat-release # 输出类似:CentOS Linux release 7.9.2009 (Core)2.2 使用 Yum 安装 Docker CEDocker 官方为 CentOS 提供了 Yum 仓库。为了获得更快的下载速度,我们可以使用国内镜像源(如阿里云)来配置这个仓库。# 1. 卸载旧版本 Docker(如果存在) sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 2. 安装必要的依赖包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 3. 设置稳定的 Docker Yum 仓库(使用阿里云镜像) sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 4. 更新 Yum 软件包索引 sudo yum makecache fast # 5. 安装 Docker CE(社区版)和命令行工具 sudo yum install -y docker-ce docker-ce-cli containerd.io # 6. 启动 Docker 服务并设置开机自启 sudo systemctl start docker sud