制作centos8基础镜像

使用Dockerfile 文件制作基础镜像

环境地址:

ip:x.x.x.x

目录:/data/cus_images

步骤详情:

  1. 创建子目录 execute,在这个目录下制作执行制作镜像的步骤,在这个目录里再新建 userfiles 目录,制作镜像需要的文件都放到这里。

    拷贝文件:

    cp /root/scripts/upgrade/* /data/cus_images/execute/userfiles/

  2. Dockerfile路径:/data/cus_images/execute,拷贝和复制文件到Dockerfile 中的话,不能到Dockerfile 以外的文件中去复制。

    FROM centos:latest
    
    RUN rm -rf /etc/yum.repos.d/CentOS-Linux-AppStream.repo
    RUN rm -rf /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
    RUN rm -rf /etc/yum.repos.d/CentOS-Linux-Extras.repo
    # ADD 和 COPY 指令不能复制 Dockerfile 父目录之外的文件,所以创建 userfiles 文件夹,拷贝需要的问题
    ADD ./userfiles/Centos-8.repo /etc/yum.repos.d/
    RUN yum clean all && yum makecache
    
    
    
  3. 非交互式创建密钥对,开启sshd 服务,但是CMD指令后使用的并不生效,需要 写在 /etc/bashrc 中才能生效。另一种方法是放到最后的启动脚本里执行也可以。

    ssh-keygen -t rsa -q -N '' -f /etc/ssh/ssh_host_rsa_key
    ssh-keygen -t ecdsa -q -N '' -f /etc/ssh/ssh_host_ecdsa_key
    ssh-keygen -t ed25519 -q -N '' -f /etc/ssh/ssh_host_ed25519_key
    
    #配置sshd 服务,使用CMD指令启动不会生效
    #RUN echo "/usr/sbin/sshd" >> /etc/bashrc
    EXPOSE 22
    CMD ["/usr/sbin/sshd"]
    
  4. 修改root 用户密码

    RUN echo '123456' | passwd --stdin "root"
    
  5. dockerfile 中修改 主机名,

    实验多次,/etc/hostname 中的文件都会被覆盖掉

    解决方案:使用hostname 命令修改主机名,写在一个shell 脚本中,开机执行。

    但是必须要有以下3个条件才能实现

    • hostname 命令必须在shell 脚本中执行
    • 在脚本中必须再 调用一次 bash 环境出来
    • 创建容器的的时候必须给容器扩展权限,也就是 --privileged=true 必须开启

    在dockerfile 中的实现方式如下:

    # 脚本中 rm $0 表示执行后删除本文件
    # echo 后面一定要接单引号,表示弱引用,不然写入到 文件中 的$0 被自动解析成了'/bin/sh'。导致报错
    #RUN echo -e ' #!/bin/bash\nhostname FFY-DEV\nrm $0\n/bin/bash ' > /ch_hostname.sh
    RUN echo -e ' #!/bin/bash\nhostname FFY-DEV\nrm $0\n/bin/bash ' > /ch_hostname.sh
    CMD ["bash","/ch_hostname.sh"]
    
  6. 完整可用的Dockerfile 文件如下:

    FROM centos:latest
    
    RUN rm -rf /etc/yum.repos.d/CentOS-Linux-AppStream.repo
    RUN rm -rf /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
    RUN rm -rf /etc/yum.repos.d/CentOS-Linux-Extras.repo
    ADD ./userfiles/Centos-8.repo /etc/yum.repos.d/
    RUN yum clean all && yum makecache
    
    RUN yum install -y gcc gcc-c++ vim net-tools openssl openssl-devel openssh openssh-clients openssh-server wget passwd make cmake
    
    #编译安装python3.9.6
    WORKDIR "/root"
    COPY ./userfiles/Python-3.9.6.tar.xz /root/
    COPY ./userfiles/update-python.sh /root/
    RUN chmod 777 /root/update-python.sh
    RUN /root/update-python.sh
    RUN python -m pip install --upgrade pip
    
    #配置sshd 服务,使用CMD指令启动应该不会生效
    RUN ssh-keygen -t rsa -q -N '' -f /etc/ssh/ssh_host_rsa_key
    RUN ssh-keygen -t ecdsa -q -N '' -f /etc/ssh/ssh_host_ecdsa_key
    RUN ssh-keygen -t ed25519 -q -N '' -f /etc/ssh/ssh_host_ed25519_key
    RUN echo "/usr/sbin/sshd" >> /etc/bashrc
    EXPOSE 22
    #CMD ["/usr/sbin/sshd"]
    
    #配置root密码
    RUN echo '123456' | passwd --stdin "root"
    
    #配置主机名
    RUN echo -e ' #!/bin/bash\nhostname FFY-DEV\nrm $0\n/bin/bash ' > /ch_hostname.sh
    CMD ["bash","/ch_hostname.sh"]
    
posted @ 2022-02-23 00:36  风风羊  阅读(489)  评论(0编辑  收藏  举报