🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度
这类 Docker 基础操作,最核心的价值不是记住命令,而是理解“镜像”和“容器”这两个核心概念在实际操作中如何联动。很多人学 Docker 卡在第一步,就是因为把镜像当成了虚拟机镜像,把容器当成了虚拟机,思路一错,后面配置、安装、部署全乱套。
这篇文章不讲大道理,直接围绕“定制简单镜像”和“在容器内配置 Yum 仓库并安装服务”这两个具体任务,拆解每一步的操作逻辑和背后的原因。目标是让你在普通 Linux 环境下,能独立完成从编写 Dockerfile 到运行一个自定义服务的完整流程,并理解每一步为什么这么做,以及出了问题该往哪个方向排查。
1. 先理清核心概念:镜像、容器与 Yum 仓库的关系
在动手之前,必须把三个关键对象的关系摆正,这是后续所有操作不跑偏的基础。
1.1 镜像是模板,容器是实例
你可以把 Docker 镜像 理解为一个只读的模板或者一套“装机 U 盘”。这个 U 盘里包含了操作系统(如 CentOS、Ubuntu 的精简版)、预装的软件、环境变量和配置文件。镜像是静态的、分层的,它本身不能运行。
Docker 容器 则是根据这个镜像“启动”出来的一个独立运行环境,或者说是一个“正在运行的进程”。容器拥有自己的文件系统、网络、进程空间。你对容器内部所做的任何修改(比如安装软件、写入文件),默认都只存在于这个容器生命周期内,不会影响原始的镜像。
一个常见的误区是,把容器当成一个完整的、持久的虚拟机来用。实际上,容器的设计初衷是 无状态 和 可丢弃 的。你的应用代码和持久化数据,应该通过 卷(Volume) 或 绑定挂载(Bind Mount) 放在容器外部管理。
1.2 容器内的 Yum 仓库:为什么要单独配置?
默认的 Docker 官方镜像(如 centos:7 )为了保持最小体积,通常不包含完整的 yum 仓库配置,或者其配置的源地址可能因为网络原因无法访问。这就导致了一个典型问题:你启动一个 CentOS 容器,进去直接 yum install nginx ,很可能会因为网络超时或找不到仓库而失败。
因此,“为容器配置 Yum 仓库”这个操作,通常有两种场景:
- 在 Dockerfile 中配置 :为了构建一个包含了特定服务的自定义镜像。这样,基于此镜像启动的任何容器,都自带了可用的 Yum 源和预装的服务。
- 在正在运行的容器中临时配置 :用于调试、测试或快速验证某个软件在特定基础环境下的兼容性。
我们接下来的操作会覆盖第一种场景,这是更规范、更可复用的做法。
1.3 任务拆解:我们要做什么?
根据标题,我们的实操路径很清晰:
- 定制简单镜像 :编写一个 Dockerfile,以某个官方镜像(如 CentOS)为基础,在其中完成我们的定制化操作。
- 在镜像构建过程中配置 Yum 仓库 :在 Dockerfile 里,将 Yum 源替换为国内访问速度更快的镜像源(如阿里云、清华源)。
- 在镜像构建过程中安装部署服务 :使用配置好的 Yum 仓库,安装我们需要的服务(例如 Nginx、Vim、Net-tools 等),并做好基础配置。
- 基于自定义镜像运行容器 :验证服务在容器内是否能够正常运行。
2. 环境准备与 Dockerfile 核心语法
在写第一行 Dockerfile 之前,先确保你的环境能跑起来。
2.1 宿主机环境检查
Docker 可以运行在 Linux、macOS 和 Windows 上。对于学习而言,我建议使用 Linux 环境(物理机、虚拟机或云服务器均可),能避开很多桌面版的兼容性问题。
在宿主机上执行以下检查:
# 1. 检查内核版本(Linux 要求内核 3.10 以上)
uname -r
# 2. 检查 Docker 是否已安装及版本
docker --version
# 3. 运行一个测试容器,验证 Docker 引擎工作正常
docker run hello-world
如果 docker --version 报错,你需要先安装 Docker。在 CentOS 7 上,一个比较稳妥的安装步骤如下:
# 卸载旧版本(如果有)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装必要的依赖包
sudo yum install -y yum-utils
# 添加 Docker 的官方 Yum 仓库(这里使用阿里云镜像加速)
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker Engine
sudo yum install -y docker-ce docker-ce-c


295

被折叠的 条评论
为什么被折叠?



