引言
在云原生与容器化技术迅猛发展的今天,如何兼顾应用部署的极致轻量化与高安全性,成为开发者面临的核心挑战。openEuler社区正式发布Base、Static、CC、Ruby、Python、Node.js、PHP、JRE等Distroless镜像,通过“零操作系统冗余”的设计理念,为容器化应用提供更小、更快、更安全的运行时环境。
Distroless镜像是移除所有非必要组件(如Shell、包管理器、系统工具)的极简容器镜像,仅保留应用运行所需的最小依赖。其核心价值在于:
- 安全加固
:无Shell和包管理器,攻击面减少 - 镜像瘦身
:相比传统镜像体积缩小50%~90%,更利于存储和传播

1. 提交slice definition files
SDF (slice definition files)定义了openEuler软件包切分成不同slice的规则(如上图中的A.yaml
)。
目前,所有SDF均为手工生成,构建Distroless镜像之前,需要先在slice-releases仓库的对应分支提交所有被用到的软件包的SDF文件。

2. 使用EulerPublisher【2】构建
当slice-releases【3】对应的分支已经有构建目标distroless镜像的所有SDF之后,即可使用EulerPublisher构建或直接发布目标镜像:
# 1. 构建openeuler/distroless-cc:latest镜像eulerpublisher container distroless build -p openeuler/distroless-cc -t latest -f Distrofile# 2. 一键构建发布openeuler/distroless-cc:latest镜像eulerpublisher container distroless publish -p openeuler/distroless-cc -t latest -f Distrofile
以distroless-cc镜像构建为例,Distrofile作为构建输入,内容如下:
name: distroless-ccsummary: summary for `distroless-cc` imagebase: scratch # 构建distroless镜像时的基础镜像release: 24.03-LTS # 以openEuler版本命名的slice分支platforms: # 目标distroless镜像的架构- linux/amd64- linux/arm64parts: # 构建目标镜像所需的所有slices- tzdata_base # slice名称由两部分组成:{软件包名}_{SDF文件中的slice名}- tzdata_zoneinfo- ca-certificates_static- libstdc++_libs- openssl-libs_libs
其中parts域段中的所有slice是以{软件包名}_{SDF文件中的slice名}
命名,例如,tzdata_base即表示tzdata软件包的base slice,它在SDF中的定义如下:
# tzdata.ymlpackage: tzdataslices:base:contents:common:- /usr/share/zoneinfo/CET- /usr/share/zoneinfo/CST6CDT- /usr/share/zoneinfo/EET- /usr/share/zoneinfo/EST- /usr/share/zoneinfo/EST5EDT- /usr/share/zoneinfo/Factory- /usr/share/zoneinfo/HST- /usr/share/zoneinfo/MET- /usr/share/zoneinfo/MST- /usr/share/zoneinfo/MST7MDT- /usr/share/zoneinfo/PST8PDT- /usr/share/zoneinfo/WET- /usr/share/zoneinfo/iso3166.tab- /usr/share/zoneinfo/leapseconds- /usr/share/zoneinfo/tzdata.ziafrica:deps:- tzdata_configcontents:common:- /usr/share/zoneinfo/Africa/**...
1. openEuler社区正式发布多个语言类distroless镜像
| 镜像 | 适用场景 | 包含内容 |
|---|---|---|
static | ||
base | ||
cc | ||
python | ||
nodejs | ||
jre | ||
ruby | ||
php |
2. openEuler Distroless镜像与标准镜像体积对比

通常情况下,建议用户使用openEuler Distroless镜像作为运行时环境的基础镜像来使用,使用方法如下
以Python镜像为例:
1. 编写Dockerfile
# dockerfileFROM openeuler/distroless-python:3.11.6-oe2403ltsCOPY app.py app.pyCMD ["/usr/bin/python3.11", "/app.py"]
2. 构建镜像
docker build -t my-python-app .
3. 安全运行
docker run --rm my-python-app
所有Distroless镜像已发布至Docker Hub, Quay, hub.oepkgs(中科院软件所)。以Distroless-python为例,获取方式如下:
# 从Docker Hub获取distroless-pythondocker pull openeuler/distroless-python:3.11.6-oe2403lts# 从Quay.io获取distroless-pythondocker pull quay.io/openeuler/distroless-python:3.11.6-oe2403lts# 从中科院软件所获取distroless-pythondocker pull hub.oepkgs.net/openeuler/distroless-python:3.11.6-oe2403lts
由于国内访问Docker Hub受限,建议国内用户优先选择从从中科院软件所(hub.oepkgs.net)获取所有Distroless镜像。
引用:




