2026/1/9 6:28:29
网站建设
项目流程
哪些网站有搜索引擎作弊的,策划专业网站,长沙做网站多少钱,杭州比较好的景观设计公司文章目录在指定的根目录中卸载 setup 包为什么要删除 setup 包#xff1f;使用场景举例什么是 UBI 9dockerfile多阶段构建 UBI 9在指定的根目录中卸载 setup 包
rpm --root /mnt/rootfs -e --nodeps setup这条命令的作用是在指定的根目录中卸载 setup 包#xff0c;并忽略依…文章目录在指定的根目录中卸载 setup 包为什么要删除 setup 包使用场景举例什么是 UBI 9dockerfile多阶段构建 UBI 9在指定的根目录中卸载 setup 包rpm--root /mnt/rootfs -e --nodeps setup这条命令的作用是在指定的根目录中卸载 setup 包并忽略依赖关系检查。–root 参数在挂载的文件系统中进行操作而不影响宿主系统-e 参数删除已安装的包–nodeps 参数跳过依赖性检查危险操作可能破坏系统这是一条高风险命令仅在其他方法都失败的情况下使用且操作前务必备份重要数据。为什么要删除 setup 包方面说明setup 包的作用提供基础系统配置文件/etc/passwd,/etc/group,/etc/profile等为什么删除在容器镜像中不需要系统初始化脚本这些文件占用空间且无用–nodeps 的意义跳过依赖检查因为其他包可能依赖 setup但在最小化镜像中不关心镜像优化删除不必要的包使镜像尽可能小使用场景举例什么是 UBI 9UBI 是 Universal Base ImageRed Hat 官方提供的容器基础镜像。让我详细解释。UBI 9 Universal Base Image 9 ↓ 基于 RHEL 9Red Hat Enterprise Linux 9包含✅ glibc标准 C 库✅ SSL/TLS 证书✅ 时区数据库✅ 本地化文件# 标准版包含包管理器FROM registry.redhat.io/ubi9/ubi:latest# 最小化版推荐用于多阶段构建FROM registry.redhat.io/ubi9/ubi-minimal:latest# 超最小化版极度简化FROM registry.redhat.io/ubi9/ubi-micro:latest版本大小包管理器场景ubi:latest70-80 MBdnf rpm开发、需要灵活性ubi-minimal40-50 MBmicrodnf轻量版生产、多阶段构建ubi-micro20-30 MB无包管理器超轻量、只有运行时dockerfile多阶段构建 UBI 9# 第一阶段使用标准 UBI 9 构建 FROM registry.redhat.io/ubi9/ubi:latest AS builder # 在这里可以自由安装任何包 RUN dnf install -y \ curl \ nginx \ openssl \ ca-certificates # 准备文件 RUN mkdir -p /mnt/rootfs \ dnf install --installroot /mnt/rootfs \ curl nginx \ --releasever 9 \ --setopt install_weak_depsfalse \ --nodocs -y \ dnf --installroot /mnt/rootfs clean all \ rpm --root /mnt/rootfs -e --nodeps setup # 第二阶段使用最小化 UBI 9 运行 FROM registry.redhat.io/ubi9/ubi-minimal:latest # 只复制必需文件,“只复制必需文件”容易出问题尤其是库路径、符号链接、权限和特殊文件device、管道、selinux 标签会丢失或错位 COPY --frombuilder /mnt/rootfs/usr/bin/curl /usr/bin/curl COPY --frombuilder /mnt/rootfs/usr/sbin/nginx /usr/sbin/nginx COPY --frombuilder /mnt/rootfs/usr/lib64/ /usr/lib64/ COPY --frombuilder /mnt/rootfs/etc/nginx/ /etc/nginx/ CMD [/usr/sbin/nginx,-g,daemon off;]注意“只复制必需文件”确实容易出问题尤其是库路径、符号链接、权限和特殊文件device、管道、selinux 标签会丢失或错位。应该改成COPY --frombuilder /mnt/rootfs //mnt/rootfs 中的所有内容都被递归复制到目标 / 中如果目标已有同名文件则覆盖如果目标没有该文件则新增但是这种方式也会存在潜在的风险(残留 rpm/dnf 元数据可能误导后续运维重复或不一致的库导致难排查、覆盖系统配置/etc 中的配置符号链接与版本冲突不同版本的 .so 文件与链接可能破坏依赖解析 等)我们需要做到以下几点构建时候需要rpm --root /mnt/rootfs -e --nodeps setup删除 setup 包在指定的安装根目录下清理 DNF 缓存和元数据dnf --installroot /mnt/rootfs clean all优先在运行时使用与 builder 相同的基镜像尤其3我觉得最重要尤其你使用COPY --frombuilder /mnt/rootfs /这种覆盖方式