• 从零创建Docker用基础镜像 - CentOS7.9 x86_64


    文档是根据百度到的各种资料,并实际操作,边做边记录的,本文档主要目的也是为了记录,以便于以后用到时查询

    文档的目的是自己创建一个 Docker 用基础镜像用的一个 rootfs 系统

    一、安装 最小版 CentOS7.9 系统

    安装 最小版就可以,各个 Mirrors 站都有 ,试过用 Live 版,但在安装 yum 过程中到 glibc时 live 系统会死机

    http://mirrors.ustc.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2207-02.iso

    小贴士:自 8 版本后因为 redhat 对 CentOS政策变动,所以下面是 8 以后版本的替代者
    rockyLinux - 原 CentOS创始人之一另起的一个发行版,各个 Mirrors 都有
    AlmaLinux - CloudLinux 公司维护的一个社区版本,也是免费的,除了官方外,现仅发现 阿里云
    上有镜像,各个信息来看好像比 rockyLinux 要好些 yum

    二、基本设置

    我使用的 PVE 建立的虚拟机,其他是用虚拟机还是真机都无所谓

    1.启动到桌面后,前期需要做一些设置,只是为了后面可 ssh 远程操作方便而已,所以不做赘述,以自己实际情况设置即可

    1)设置网络,如是静态 IP ,修改完IP无法 ping 的,可以断天网络再连接一下试试
    2)关闭防火墙,反正也是临时系统:
    2.1) 修改 /etc/selinux/config 文件,修改内容为SELINUX=disabled,保存后 setenforce 0>
    2.2)执行 systemctl stop firewalld.service
    2.3)执行 systemctl disable firewalld.service

    3)设置 ssh ,比如连接端口,是否允许 root 连接等你所需要的设置,设置完成后重启下 ssh 服务 systemctl stop ssh.service

    4)设置自动熄屏和自动休眠的时间,以免因此制作到一半时断网

    2.都设置没问题后可以使用 ssh 客户端连接到该虚拟机,方便粘贴脚本,当然了,你如果喜欢打键盘也无所谓

    三、开始创建

    全程以 root 用户进行操作

    # 切换 root 用户
    su - 
    
    # 创建目录
    mkdir -p /root/rootfs/var/lib/rpm
    
    # 设置 rpm 主目录
    rpm --root /root/rootfs/ --initdb
    
    # 下载并安装基本系统
    rpm -ivh --nodeps --root /root/rootfs/ http://mirrors.ustc.edu.cn/centos/7.9.2009/os/x86_64/Packages/centos-release-7-9.2009.0.el7.centos.x86_64.rpm
    
    # 可以先查看一下结果
    ls /root/rootfs/
    ls /root/rootfs/etc/
    
    # 给 rootfs 系统中安装 yum
    yum --installroot=/root/rootfs install yum --nogpgcheck
    
    # 拷贝 dns 文件到 rootfs 中
    cp -L /etc/resolv.conf /root/rootfs/etc/resolv.conf
    # 下面这行可以不用,因为 rootfs 中也有自己的 源
    # cp –r /etc/yum.repos.d/ /root/rootfs/etc/
    
    # 复制当前系统的基本配置文件,不拷贝也可以,只是会使用最基本的 bash 配置也一样
    # cp -vL .bashrc rootfs/root/
    # cp -vL .bash_profile rootfs/root/
    
    # 此时 rootfs 已经生成,可以 chroot rootfs 进入使用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    chroot rootfs 主要是为了安装或清理一下垃圾文件及信息

    # 进入 rootfs 前,需要先挂载宿主机的 /dev 目录,否则 rootfs 内 yum 会报错
    mount --bind /dev/ rootfs/dev/
    
    # 也可以把 宿主系统中的 .bashrc .bash_profile 拷贝到 rootfs/root 目录中,根据个人需要,就不写了
    
    # 此时可以 进入 rootfs
    chroot rootfs
    
    # 添加ustc中国科技大学的 epel 扩展源
    yum install -y epel-release
    sed -e 's|^metalink=|#metalink=|g' \
             -e 's|^#baseurl=https\?://download.fedoraproject.org/pub/epel/|baseurl=https://mirrors.ustc.edu.cn/epel/|g' \
             -e 's|^#baseurl=https\?://download.example/pub/epel/|baseurl=https://mirrors.ustc.edu.cn/epel/|g' \
             -i.bak \
             /etc/yum.repos.d/epel.repo
             
    yum clean all && yum makecache
    
    # 可以安装一些所需的工具
    yum install -y bash-completion iputils wget nano shadow-utils 
    # bash-completion 命令参数补全 / net-tools 网络管理工具,较大,可选择不用安装 
    # iputils ping工具 / wget 下载 / nano 文本编辑,体积小
    # shadow-utils 添加一些用户、组管理工具
    
    # 都安装完了,可以清理一下,用于减小打包
    yum clean all
    
    # 退出 rootfs ,打包
    exit
    umount -l rootfs/dev/	# 别忘记给卸载掉
    mount -l | grep rootfs	#可以通过这个命令查看是否还在挂载没有卸掉
    cd rootfs
    tar czvf ../rootfs-CentOS7.9.tar.gz *
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    最后生成的文件就是 rootfs 的压缩包,拷贝走就可以了

    四、Docker 通过 rootfs 生成基础镜像

    全程在 root 用户及其目录中执行

    # 创建 存放 rootfs / Dockerfile 文件的目录
    mkdir -p rootfs-CentOS7.9
    cd rootfs-CentOS7.9
    
    # 放入之前创建的 rootfs-CentOS7.9.tar.gz
    # 创建 Dockerfile 文件
    vim Dockerfile
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    文件内容如下:

    # 以下为必写信息
    # 创建一个空镜像
    FROM scratch
    # 镜像建立人的信息
    MAINTAINER UnMobile
    # 将压缩的 rootfs 文件自动解压,并拷贝到镜像的根文件目录中
    ADD ./rootfs-CentOS7.9.tar.gz /
    ### 文档内容结束
    # 保存文件退出,按 ESC 输入 wq 并回车
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    开始生成 docker 镜像

    docker build --rm -t unmobile/centos7.9-baseimage:v0 .
    # 注意最后有一个点,那个是指 dockerfile的位置在当前位置,是相对路径
    # --rm 设置镜像成功后删除中间容器
    
    • 1
    • 2
    • 3

    可以测试运行一下

    docker images # 显示现在已经添加的镜像信息,找到已经添加成功的镜像
    # 可以用下面的命令运行这个镜像,生成一个新的容器
    命令格式:docker run -it -p 1521:1521 -v 宿主机目录:容器中目录 镜像名或镜像ID 要在容器中执行的命令(如 /bin/bash)
    # -it 以交互式进入容器操作,可以理解为连接到容器中使用容器中的系统
    # -P 随机指定宿主机端口与容器端口进行映射
    # 以下参数可以加多个
    # -p 指定宿主机端口与指定容器端口进行映射
    # -v 指定宿主机目录引用至指定容器目录,可以使重要数据持久化,以防容器被删除
    
    # 例如
    docker run -it -p 1521:1521 -v /data:/ORCLData XXXXXXXXXX /bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    无需CORS,用nginx解决跨域问题,轻松实现低代码开发的前后端分离
    【R语言】把文件夹下的所有文件提取到特定文件夹
    Linux 启动流程及相关知识
    (已更新)王者荣耀改名神器助手微信小程序源码下载
    jenkins 中文乱码及执行报错
    Android12 禁用adb
    Rust 从 PyTorch 到 Burn
    vim的超详细使用方法
    关于项目管理的若干建议
    torch实现Gated PixelCNN
  • 原文地址:https://blog.csdn.net/unmobile/article/details/127611980