优化减少容器镜像大小 - 使用最小的包管理器

一、简介:最小的rpm包管理器-godnf

在容器镜像场景,alpine总是让人着迷,拥有最小的包管理器apk,使得alpine的最小容器镜像大小可以只要7M, 大大的减小了基于此做的容器镜像大小。但是alpine使用 musl libc,而不是 glibc 作为 C 库,可能会影响到一些应用的兼容性,如 NVIDIA 的官方 CUDA 驱动和工具包是针对基于 glibc进行构建和测试,musl libc 存在兼容性问题。如果强行安装GNU glibc,又非常麻烦。

反观,服务器操作系统的主流发行商redhat, openSuse, 国内的Huawei OpenEuler,Tencent OpenCloudOS, 在服务器领域的应用兼容性上没有问题,但是又因为包管理器dnf过大,导致基础镜像已经很大。

Redhat:

namesizeDesc
ubi9-minimal98.7MBmicrodnf package manager
ubi9230Mdnf package manager

Alpine:

namesizeDesc
alpine7.8Mapk package manager

为什么dnf包管理器比apk要大很多了,主要因为dnf的功能复杂,引入的动态库非常多;对dnf做功能裁剪的话,目前来看非常困难。

那为什么不开发个简化的dnf工具呢,而且是静态编译,不需要的时候直接删除,不需要考虑复杂的软件包依赖。因此godnf应运而生。

godnf是基于go语言开发,目前已经有rpm的go 库,基于这个库,我们增加软件包依赖解析和下载,就可以完成基础的rpm软件包安装。重点:这个godnf程序只有4.5M,非常的小。

代码链接:https://github.com/docker-toolkits/godnf

NAME:
   godnf - package manager use go

USAGE:
   godnf [global options] command [command options] [arguments...]

VERSION:
   v1.0.0

COMMANDS:
   install  install rpm packages
   list     list rpm packages
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --loglevel value  set log level: 0-DEBUG, 1-INFO, 2-WARN, 3-ERROR, default:3 (default: 3)
   --help, -h        show help
   --version, -v     print the version

二、使用

基于godnf +redhat、OpenCloudOS的软件源,已经构建两个基础镜像:

镜像:godnfredhat/openCloudOS repo + static busybox

namereposizeusage
godnf/ocs23openCloudOS Stream 235.92Mdocker pull godnf/ocs23:latest
godnf/ubi9redhat ubi95.92Mdocker pull godnf/ubi9:latest

我们可以基于基础镜像构建继续构建。

1> 构建python的容器镜像

Dockerfile

FROM godnf/ubi9:latest

RUN godnf install python

CMD ["/bin/python"]

2> 执行构建:

docker build -t godnf-ubi9-python .

3> 运行容器

[root@localhost tst]# docker run -it godnf-ubi9-python 
Python 3.9.18 (main, Jan 24 2024, 00:00:00)
[GCC 11.4.1 20231218 (Red Hat 11.4.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

我们对比一下容器大小:

分别使用redhat/ubi9-minimal 和 godnf/ubi9作为FROM镜像构建python,可以看到redhat/ubi9-minimal microdnf的构建出来的容器镜像几乎大了一倍。

REPOSITORY                                           TAG               IMAGE ID       CREATED        SIZE
godnf-ubi9-python                                    latest            804d9356672a   2 minutes ago   89MB
redhat-python                                        latest            497e42bb657f   4 days ago      151MB
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值