Docker镜像定制实战:从配置Yum仓库到部署Nginx服务

在容器化技术普及的今天,你是否遇到过这样的困境:从 Docker Hub 拉取的官方镜像功能不全,需要手动进入容器安装一堆工具;或者,想在容器内部署一个服务,却发现连最基本的 yum apt 命令都无法使用,因为镜像里没有配置软件源。这些问题常常让容器化部署的体验变得支离破碎。

本文将系统性地解决这些痛点,手把手带你掌握 Docker 镜像定制的核心技能。我们将从创建一个满足自己需求的“简单镜像”开始,深入到如何在容器内部灵活配置 Yum 软件仓库,并最终完成一个服务(如 Nginx)在容器内的完整安装与部署。无论你是刚接触 Docker 的新手,还是希望优化现有容器化流程的开发者,这篇从零到一的实战指南都能让你获得一套可复用的完整方案。

1. 理解核心概念:镜像、容器与仓库

在开始动手之前,我们需要清晰地理解三个核心概念及其关系,这是所有 Docker 操作的基础。

Docker 镜像 是一个只读的模板,它包含了运行某个软件所需的所有内容:代码、运行时环境、系统工具、系统库和设置。你可以把它想象成一个应用程序的“安装包”或“快照”。镜像是分层的,每一层都代表 Dockerfile 中的一条指令,这种设计使得镜像非常轻量和高效。

Docker 容器 是镜像的一个运行实例。当你从镜像启动一个容器时,Docker 会在镜像层之上创建一个可写的“容器层”。所有对运行中容器的修改(如创建文件、安装软件)都发生在这个容器层中。容器可以被启动、停止、移动和删除,每个容器都是相互隔离的。

Yum 仓库 是 CentOS、RHEL、Fedora 等 Red Hat 系 Linux 发行版中用于管理 RPM 软件包的集中存储库。它存储了大量软件包及其元数据(如依赖关系)。 yum dnf 命令通过访问配置的仓库地址来搜索、安装、更新和删除软件。

它们之间的关系 :我们通过编写 Dockerfile (一个文本文件,包含一系列构建指令)来“定制镜像”。构建好的镜像可以上传到镜像仓库(如 Docker Hub、私有 Harbor)进行共享。当我们需要运行应用时,就从镜像“创建并启动”一个容器。如果这个基础镜像非常精简(如 centos:7 的 minimal 版本),其内部的 Yum 仓库配置可能不完整或指向的源速度很慢,因此我们常常需要在构建镜像时或启动容器后,为其“配置 Yum 仓库”,以便顺利安装所需服务。

2. 环境准备与版本说明

在开始实战前,请确保你有一个可用的 Docker 环境。以下版本作为参考,但不同版本的核心操作基本一致。

  • 操作系统 :Ubuntu 20.04 LTS / CentOS 7.9 / Windows 10/11 with WSL2。本文命令主要在 Linux/WSL 终端下执行。
  • Docker 引擎 :版本 20.10.x 或更高。可通过 docker --version 检查。
  • 基础镜像 :我们将使用 centos:7 作为演示。这是一个官方维护的、相对精简的 CentOS 7 镜像。
  • 目标服务 :以部署 Nginx 为例,它是一个流行的 Web 服务器,用于演示服务安装部署的完整流程。

如何安装 Docker (如未安装): 对于 Ubuntu 系统,可参考以下步骤。其他系统请查阅 Docker 官方文档。

# 1. 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 2. 更新 apt 包索引并安装依赖
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

# 3. 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 4. 设置稳定版仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. 安装 Docker 引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 6. 验证安装
sudo docker run hello-world

如果看到 Hello from Docker! 的输出,说明安装成功。为了避免每次命令都加 sudo ,可以将当前用户加入 docker 组(操作后需退出终端重新登录): sudo usermod -aG docker $USER

3. 实战第一步:编写 Dockerfile 定制简单镜像

我们的目标是创建一个内置了 vim wget net-tools 等常用工具的 CentOS 镜像,并预设好国内的 Yum 源以加速后续软件安装。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值