Docker通过DockerFile自定义Centos 镜像
自己练习dockerFile,自定义centos镜像,并使之可以执行基本命令:
vim
和
ifconfig
定义DockerFile
- 编写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
- 通过已创建的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镜像:
- 自定义一个改良版的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容器,就可以使用vim
和ifconfig
命令了。
操作练习来源于:B站UP主:遇见狂神说(良心大神)