千家信息网

linux如何构建更小的容器镜像

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,小编给大家分享一下linux如何构建更小的容器镜像,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!microdnfFedor
千家信息网最后更新 2025年12月02日linux如何构建更小的容器镜像

小编给大家分享一下linux如何构建更小的容器镜像,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

microdnf

Fedora 的 DNF 是用 Python 编写的,因为它有各种各样的插件,因此它的设计是可扩展的。但是 有一个 Fedora 基本容器镜像替代品,它使用一个较小的名为 microdnf 的包管理器,使用 C 编写。要在 Dockerfile 中使用这个最小的镜像,FROM 行应该如下所示:

FROM registry.fedoraproject.org/fedora-minimal:30

如果你的镜像不需要像 Python 这样的典型 DNF 依赖项,例如,如果你在制作 NodeJS 镜像时,那么这是一个重要的节省项。

在一个层中安装和清理

为了节省空间,使用 dnf clean all 或其 microdnf 等效的 microdnf clean all 删除仓库元数据非常重要。但是你不应该分两步执行此操作,因为这实际上会将这些文件保存在容器镜像中,然后在另一层中将其标记为删除。要正确地执行此操作,你应该像这样一步完成安装和清理:

FROM registry.fedoraproject.org/fedora-minimal:30RUN microdnf install nodejs && microdnf clean all

使用 microdnf 进行模块化

模块化是一种给你选择不同堆栈版本的方法。例如,你可能需要在项目中用非 LTS 的 NodeJS v11,旧的 LTS NodeJS v8 用于另一个,***的 LTS NodeJS v10 用于另一个。你可以使用冒号指定流。

# dnf module list# dnf module install nodejs:8

dnf module install 命令意味着两个命令,一个启用流,另一个是从它安装 nodejs。

# dnf module enable nodejs:8# dnf install nodejs

尽管 microdnf 不提供与模块化相关的任何命令,但是可以启用带有配置文件的模块,并且 libdnf(被 microdnf 使用)似乎支持模块化流。该文件看起来像这样:

/etc/dnf/modules.d/nodejs.module[nodejs]name=nodejsstream=8profiles=state=enabled

使用模块化的 microdnf 的完整 Dockerfile 如下所示:

FROM registry.fedoraproject.org/fedora-minimal:30RUN \   echo -e "[nodejs]\nname=nodejs\nstream=8\nprofiles=\nstate=enabled\n" > /etc/dnf/modules.d/nodejs.module && \   microdnf install nodejs zopfli findutils busybox && \   microdnf clean all

多阶段构建

在许多情况下,你可能需要大量的无需用于运行软件的构建时依赖项,例如构建一个静态链接依赖项的 Go 二进制文件。多阶段构建是分离应用构建和应用运行时的有效方法。

例如,下面的 Dockerfile 构建了一个 Go 应用 confd。

# building containerFROM registry.fedoraproject.org/fedora-minimal AS buildRUN mkdir /go && microdnf install golang && microdnf clean allWORKDIR /goRUN export GOPATH=/go; CGO_ENABLED=0 go get github.com/kelseyhightower/confd FROM registry.fedoraproject.org/fedora-minimalWORKDIR /COPY --from=build /go/bin/confd /usr/local/binCMD ["confd"]

通过在 FROM 指令之后添加 AS 并从基本容器镜像中添加另一个 FROM 然后使用 COPY --from= 指令将内容从构建的容器复制到第二个容器来完成多阶段构建。

可以使用 podman 构建并运行此 Dockerfile:

$ podman build -t myconfd .$ podman run -it myconfd

以上是"linux如何构建更小的容器镜像"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

镜像 容器 模块 文件 内容 命令 篇文章 阶段 应用 运行 重要 指令 方法 不同 最小 有效 不怎么 两个 中将 中用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器安全防范流程 苹果的网络安全工程师 手机属于什么服务器 印度软件开发平均工资 菏泽app软件开发聚顶科技有名 服务器更新统一管理 网吧网络安全责任制 数据库空格是什么符号 网络安全手抄报图片可爱动漫 东至巨型软件开发服务销售厂 鹿泉区委网络安全委员会 推荐网易版好玩的服务器我的世界 网络安全王柱宇 电魂网络安全儿童画 定制软件开发利润多少比较合理 共享电动车软件开发 派遣到智联网络技术 谷安网络安全知识技能大赛证书 数据库int默认数据类型 网络技术中专实训考核 数据库可变长字符型变量 销售软件开发公司经营范围 香港快易联网络技术有限公司 无锡品牌软件开发优势 月历模板软件开发 民航网络安全应急预案 运营软件开发服务 增加自己的网络安全 数据库中怎么查询表空间物理路径 网络安全工程师入职要求
0