Docker通过DockerFile自定义Centos 镜像

本文主要讲述编写CentOS DockerFile及创建构建脚本,通过dockerFile生成镜像时遇到因CentOS停更导致镜像repo找不到的问题。介绍了自定义改良版CentOS镜像的方法,基于此修改dockerFile基础建设命令,可解决执行yum命令报错问题。

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

Docker通过DockerFile自定义Centos 镜像


自己练习dockerFile,自定义centos镜像,并使之可以执行基本命令: vimifconfig

定义DockerFile

  1. 编写Centos DockerFile,创建构建脚本:vim mydockerFile
FROM centos

MAINTAINER 123<123@163.com>

ENV MYPATH /usr/local

WORKDIR  $MYPATH

RUN yum -y install vim

RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH

CMD echo "----end----"

CMD /bin/bash
  1. 通过已创建的dockerFile来生成镜像:(特别注意命令后面有个.)
dockerfile]# docker build -f mydockerfile -t 123/mycentos:1.0 .

执行该命令后,理论上,会正常build,创建一个新的镜像image(123/mycento:1.0)但是,这里,操作练习时,我遇到一个问题:

Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlis

发生在执行RUN yum update -y 时报错;
原因找了一大圈,说是centos停更,导致原先镜像repo不能找到,需要更新镜像repo URL
在dockerFile中,我的基础建设FROM centos命令,这里的centos来源于我从docker hub pull下来的centos,因此要直接改动官方给的镜像centos怕是不能够的。因此,我们可以先基于官方的centos image先创建一个改良版的自己的centos,这里就涉及到要自定义一个centos镜像:

  1. 自定义一个改良版的cento image:
    1.1. 首先先基于官方centos生成一个container容器:
    1.2.
~]# docker run -it centos /bin/bash
#进入容器
[root@a3c7095c2d99 /]# cd /etc/yum.repos.d/
[root@a3c7095c2d99 yum.repos.d]# ls
CentOS-Linux-AppStream.repo  CentOS-Linux-ContinuousRelease.repo  CentOS-Linux-Devel.repo   CentOS-Linux-FastTrack.repo         CentOS-Linux-Media.repo  CentOS-Linux-PowerTools.repo
CentOS-Linux-BaseOS.repo     CentOS-Linux-Debuginfo.repo          CentOS-Linux-Extras.repo  CentOS-Linux-HighAvailability.repo  CentOS-Linux-Plus.repo   CentOS-Linux-Sources.repo
[root@a3c7095c2d99 yum.repos.d]# sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
[root@a3c7095c2d99 yum.repos.d]# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
[root@a3c7095c2d99 yum.repos.d]# yum makecache
Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream                                                                                                                                                                                    2.6 MB/s | 8.4 MB     00:03    
CentOS Linux 8 - BaseOS                                                                                                                                                                                       3.8 MB/s | 4.6 MB     00:01    
CentOS Linux 8 - Extras                                                                                                                                                                                        14 kB/s |  10 kB     00:00    
Metadata cache created.
[root@a3c7095c2d99 yum.repos.d]# yum update -y

执行完后,Ctrl+p+q,退出容器,提交该容器,生成新的镜像,也就是改良版的cento image:

 ~]# docker commit -a="123" -m="update centos repo" a3c7095c2d99 123/mycentos:1.0

自此,我们生成一个改良版的centos

基于此,在编写dockerFile时,将基础建设FROM centos命令,改为:FROM 123/mycentos:1.0,执行时,docker会从本地获取改良版的centos,再去执行yum命令就不会出现报错问题了:

dockerfile]# docker build -f mydockerfile -t 123/centos:2.0 .

自此以后,基于该centos创建的container容器,就可以使用vimifconfig命令了。

操作练习来源于:B站UP主:遇见狂神说(良心大神)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值