制作centos8基础镜像
使用Dockerfile 文件制作基础镜像
环境地址:
ip:x.x.x.x
目录:/data/cus_images
步骤详情:
-
创建子目录 execute,在这个目录下制作执行制作镜像的步骤,在这个目录里再新建 userfiles 目录,制作镜像需要的文件都放到这里。
拷贝文件:
cp /root/scripts/upgrade/* /data/cus_images/execute/userfiles/
-
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
-
非交互式创建密钥对,开启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"]
-
修改root 用户密码
RUN echo '123456' | passwd --stdin "root"
-
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"]
-
完整可用的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"]