目标:因为hub拉下来的centos无法使用vim、ifconfig等命令,以这个为例子编写DockerFile,自定义一个centos并安装相应的vim、net-tools,以及定义默认进入系统的目录。

  1. 编写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

  1. 2. 保存好文件后执行build
  2. docker build -t 新镜像名字:TAG .
  3. ```shell
  4. [linguo@VM-4-6-centos dockerFile]$ docker build -f mycentos_vim_ifconfig -t centos-vim-ifconfig:1.0 .
  5. [linguo@VM-4-6-centos dockerFile]$ docker images
  6. REPOSITORY TAG IMAGE ID CREATED SIZE
  7. centos-vim-ifconfig 1.0 d9a6acd0f175 About a minute ago 591MB

记录的时间:2022-04-12,宿主机系统版本centos7.6
遇到的问题:

  1. 编译安装时遇到”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会更新软件和系统内核。
    

    阿里云镜像:https://developer.aliyun.com/mirror

  2. 验证自定义的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 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.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

[root@ea0e22f2a92d local]#

```