从零创建Docker用基础镜像 - CentOS7.9 x86_64

本文记录了自己创建 Docker 用基础镜像的 rootfs 系统的过程。先安装最小版 CentOS7.9 系统,介绍 8 版本后替代者;接着进行基本设置,如网络、防火墙、ssh 等;然后以 root 用户操作创建 rootfs 压缩包;最后通过 rootfs 生成 Docker 基础镜像并测试运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文档是根据百度到的各种资料,并实际操作,边做边记录的,本文档主要目的也是为了记录,以便于以后用到时查询

文档的目的是自己创建一个 Docker 用基础镜像用的一个 rootfs 系统

一、安装 最小版 CentOS7.9 系统

安装 最小版就可以,各个 Mirrors 站都有 ,试过用 Live 版,但在安装 yum 过程中到 glibc时 live 系统会死机

http://mirrors.ustc.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2207-02.iso

小贴士:自 8 版本后因为 redhat 对 CentOS政策变动,所以下面是 8 以后版本的替代者
rockyLinux - 原 CentOS创始人之一另起的一个发行版,各个 Mirrors 都有
AlmaLinux - CloudLinux 公司维护的一个社区版本,也是免费的,除了官方外,现仅发现 阿里云
上有镜像,各个信息来看好像比 rockyLinux 要好些 yum

二、基本设置

我使用的 PVE 建立的虚拟机,其他是用虚拟机还是真机都无所谓

1.启动到桌面后,前期需要做一些设置,只是为了后面可 ssh 远程操作方便而已,所以不做赘述,以自己实际情况设置即可

1)设置网络,如是静态 IP ,修改完IP无法 ping 的,可以断天网络再连接一下试试
2)关闭防火墙,反正也是临时系统:
2.1) 修改 /etc/selinux/config 文件,修改内容为SELINUX=disabled,保存后 setenforce 0>
2.2)执行 systemctl stop firewalld.service
2.3)执行 systemctl disable firewalld.service

3)设置 ssh ,比如连接端口,是否允许 root 连接等你所需要的设置,设置完成后重启下 ssh 服务 systemctl stop ssh.service

4)设置自动熄屏和自动休眠的时间,以免因此制作到一半时断网

2.都设置没问题后可以使用 ssh 客户端连接到该虚拟机,方便粘贴脚本,当然了,你如果喜欢打键盘也无所谓

三、开始创建

全程以 root 用户进行操作

# 切换 root 用户
su - 

# 创建目录
mkdir -p /root/rootfs/var/lib/rpm

# 设置 rpm 主目录
rpm --root /root/rootfs/ --initdb

# 下载并安装基本系统
rpm -ivh --nodeps --root /root/rootfs/ http://mirrors.ustc.edu.cn/centos/7.9.2009/os/x86_64/Packages/centos-release-7-9.2009.0.el7.centos.x86_64.rpm

# 可以先查看一下结果
ls /root/rootfs/
ls /root/rootfs/etc/

# 给 rootfs 系统中安装 yum
yum --installroot=/root/rootfs install yum --nogpgcheck

# 拷贝 dns 文件到 rootfs 中
cp -L /etc/resolv.conf /root/rootfs/etc/resolv.conf
# 下面这行可以不用,因为 rootfs 中也有自己的 源
# cp –r /etc/yum.repos.d/ /root/rootfs/etc/

# 复制当前系统的基本配置文件,不拷贝也可以,只是会使用最基本的 bash 配置也一样
# cp -vL .bashrc rootfs/root/
# cp -vL .bash_profile rootfs/root/

# 此时 rootfs 已经生成,可以 chroot rootfs 进入使用

chroot rootfs 主要是为了安装或清理一下垃圾文件及信息

# 进入 rootfs 前,需要先挂载宿主机的 /dev 目录,否则 rootfs 内 yum 会报错
mount --bind /dev/ rootfs/dev/

# 也可以把 宿主系统中的 .bashrc .bash_profile 拷贝到 rootfs/root 目录中,根据个人需要,就不写了

# 此时可以 进入 rootfs
chroot rootfs

# 添加ustc中国科技大学的 epel 扩展源
yum install -y epel-release
sed -e 's|^metalink=|#metalink=|g' \
         -e 's|^#baseurl=https\?://download.fedoraproject.org/pub/epel/|baseurl=https://mirrors.ustc.edu.cn/epel/|g' \
         -e 's|^#baseurl=https\?://download.example/pub/epel/|baseurl=https://mirrors.ustc.edu.cn/epel/|g' \
         -i.bak \
         /etc/yum.repos.d/epel.repo
         
yum clean all && yum makecache

# 可以安装一些所需的工具
yum install -y bash-completion iputils wget nano shadow-utils 
# bash-completion 命令参数补全 / net-tools 网络管理工具,较大,可选择不用安装 
# iputils ping工具 / wget 下载 / nano 文本编辑,体积小
# shadow-utils 添加一些用户、组管理工具

# 都安装完了,可以清理一下,用于减小打包
yum clean all

# 退出 rootfs ,打包
exit
umount -l rootfs/dev/	# 别忘记给卸载掉
mount -l | grep rootfs	#可以通过这个命令查看是否还在挂载没有卸掉
cd rootfs
tar czvf ../rootfs-CentOS7.9.tar.gz *

最后生成的文件就是 rootfs 的压缩包,拷贝走就可以了

四、Docker 通过 rootfs 生成基础镜像

全程在 root 用户及其目录中执行

# 创建 存放 rootfs / Dockerfile 文件的目录
mkdir -p rootfs-CentOS7.9
cd rootfs-CentOS7.9

# 放入之前创建的 rootfs-CentOS7.9.tar.gz
# 创建 Dockerfile 文件
vim Dockerfile

文件内容如下:

# 以下为必写信息
# 创建一个空镜像
FROM scratch
# 镜像建立人的信息
MAINTAINER UnMobile
# 将压缩的 rootfs 文件自动解压,并拷贝到镜像的根文件目录中
ADD ./rootfs-CentOS7.9.tar.gz /
### 文档内容结束
# 保存文件退出,按 ESC 输入 wq 并回车

开始生成 docker 镜像

docker build --rm -t unmobile/centos7.9-baseimage:v0 .
# 注意最后有一个点,那个是指 dockerfile的位置在当前位置,是相对路径
# --rm 设置镜像成功后删除中间容器

可以测试运行一下

docker images # 显示现在已经添加的镜像信息,找到已经添加成功的镜像
# 可以用下面的命令运行这个镜像,生成一个新的容器
命令格式:docker run -it -p 1521:1521 -v 宿主机目录:容器中目录 镜像名或镜像ID 要在容器中执行的命令(如 /bin/bash)
# -it 以交互式进入容器操作,可以理解为连接到容器中使用容器中的系统
# -P 随机指定宿主机端口与容器端口进行映射
# 以下参数可以加多个
# -p 指定宿主机端口与指定容器端口进行映射
# -v 指定宿主机目录引用至指定容器目录,可以使重要数据持久化,以防容器被删除

# 例如
docker run -it -p 1521:1521 -v /data:/ORCLData XXXXXXXXXX /bin/bash
### 如何查找 Docker CE 在阿里云镜像站点上的 CentOS 7.9 稳定版资源 为了在阿里云镜像站点上找到适用于 CentOS 7.9Docker CE 稳定版资源,可以按照以下方法操作: #### 配置 Docker 官方仓库的阿里云镜像 首先需要配置 Docker 的官方仓库至阿里云镜像站点。可以通过 `yum-config-manager` 命令来完成这一过程[^1]。 ```bash yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ``` 接着修改 `/etc/yum.repos.d/docker-ce.repo` 文件中的默认源地址为阿里云镜像地址: ```bash sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo ``` 最后刷新缓存以使更改生效: ```bash yum makecache fast ``` #### 下载离线安装包 如果目标环境无法联网,则可以选择下载 Docker CE 的二进制文件并上传到服务器进行离线安装。对于 CentOS 7.9x86_64 架构,可以从阿里云提供的静态链接中获取稳定版本的压缩包[^2]。 具体 URL 地址如下所示: ```plaintext https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/ ``` 进入上述页面后会看到多个不同版本号对应的 tar.gz 文件(例如 `docker-27.4.0.tgz`),选择适合需求的一个版本下载即可。 #### 卸载旧版 Docker (如有必要) 在某些情况下可能已经存在较早版本的 Docker 被预装于系统之中,在这种情形下建议先将其移除再继续后续步骤[^4]: ```bash sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine ``` #### 获取 Docker Compose 最新版本(可选扩展部分) 除了基础容器引擎外,还经常需要用到编排工具——Docker Compose 来管理多服务应用项目。以下是自动拉取其最新发行版的方法说明[^5]: 编写一段简单的 shell script 实现动态抓取指定平台架构下的 compose 可执行程序: ```bash #!/bin/bash set -e LATEST_VERSION=$(curl -fsSLI -o /dev/null -w "%{url_effective}" https://github.com/docker/compose/releases/latest | grep -oE "[0-9]+\.[0-9]+\.[0-9]+") DOWNLOAD_URL="https://github.com/docker/compose/releases/download/v${LATEST_VERSION}/docker-compose-$(uname -s)-$(uname -m)" echo $DOWNLOAD_URL curl -L "$DOWNLOAD_URL" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose ``` 此脚本利用 curl 请求 GitHub Releases 页面获得当前最新的 tag name 后拼接成实际可用的 download link 并保存到指定路径赋予执行权限结束整个流程。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值