目标:因为hub拉下来的centos无法使用vim、ifconfig等命令,以这个为例子编写DockerFile,自定义一个centos并安装相应的vim、net-tools,以及定义默认进入系统的目录。
- 编写DockerFile ```shell FROM centos #基础镜像,基于centos
作者
MAINTAINER linguoljb13127893819@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 “run success mycentos_vim_ifconfig!” CMD /bin/bash
2. 保存好文件后执行builddocker build -t 新镜像名字:TAG .```shell[linguo@VM-4-6-centos dockerFile]$ docker build -f mycentos_vim_ifconfig -t centos-vim-ifconfig:1.0 .[linguo@VM-4-6-centos dockerFile]$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos-vim-ifconfig 1.0 d9a6acd0f175 About a minute ago 591MB
记录的时间:2022-04-12,宿主机系统版本centos7.6
遇到的问题:
编译安装时遇到”NO URLs in mirrotlist”
Step 1/10 : FROM centos ---> 5d0da3dc9764 Step 2/10 : MAINTAINER linguo<ljb13127893819@163.com> ---> Running in eb51c4a25980 Removing intermediate container eb51c4a25980 ---> d2b12c9d5668 Step 3/10 : ENV MYPATH /usr/local ---> Running in d09c0c771590 Removing intermediate container d09c0c771590 ---> 3e4332957cc1 Step 4/10 : WORKDIR $MYPATH ---> Running in 775500a59447 Removing intermediate container 775500a59447 ---> 1a2d38101140 Step 5/10 : RUN yum -y install vim ---> Running in f6f4de2b5538 CentOS Linux 8 - AppStream 88 B/s | 38 B 00:00 Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist我的基础镜像默认是centos8,以基础镜像作为容器运行时由于当前的yum源不是最新的导致了该问题。
·原因·在2022年1月31日,CentOS团队终于从官方镜像中移除CentOS 8的所有包。·CentOS 8已于2021年12月31日寿终正非,但软件包仍在官方镜像上保留了一段时间。现在他们被转移到https://vault.centos.org
后来我就把基础镜像换成了centos7的版本,顺利编译通过,这里应该跟宿主机没关系,因为容器本身运行的就是centos8。
解决方法:
想办法让centos8里面的yum源更新掉,使用阿里云的镜像测了一下,顺利通过。RUN rm -rf /etc/yum.repos.d/* ADD CentOS-Base.repo /etc/yum.repos.d 宿主机下载了centos8的repo拷贝到容器中 RUN yum clean all RUN yum makecache #RUN yum update -y 别更新,更新之后又报错了,我进入系统更新了一下,发现CentOS-Linux-AppStream.repo又被下载回来了,这也是前面为什么要先删掉的原因,update会更新软件和系统内核。验证自定义的centos ```shell [linguo@VM-4-6-centos dockerFile]$ docker run -it d9a6acd0f175 [root@ea0e22f2a92d local]# pwd /usr/local [root@ea0e22f2a92d local]# vim xxx [root@ea0e22f2a92d local]# ifconfig eth0: flags=4163
mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 8 bytes 656 (656.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73
[root@ea0e22f2a92d local]#
```
