信创实战:Dockerfile 信创基础镜像构建
系列:信创国产化适配 | 作者:lin | 日期:2026-05-15
一、背景与问题
1.1 为什么信创环境需要自定义 Docker 镜像
在信创国产化落地过程中,Docker 容器化部署是标配。但直接使用官方镜像会遇到以下问题:
- 架构不匹配:官方 Docker Hub 上的 OpenJDK 镜像主要提供
amd64和aarch64,缺少申威sw64、龙芯loongarch64等国产架构 - OS 不兼容:信创环境通常要求使用国产操作系统(麒麟、统信),而官方镜像基于 Debian/Ubuntu
- 安全合规:信创项目通常要求使用经过安全审计的基础镜像,不能直接拉取公网镜像
- 定制需求:需要预装特定工具、配置国内镜像源、设置时区和 Locale 等
1.2 基础镜像选型对比
| 镜像 | 体积 | 包管理 | 国产 CPU 支持 | 适用场景 |
|---|---|---|---|---|
| Alpine 3.20 | ~5MB | apk | 仅 x86/arm64(申威/龙芯需基于国产OS) | 追求极致精简 |
| Ubuntu 22.04 | ~77MB | apt | 较好 | 需要 glibc 环境 |
| 麒麟 V10 | ~200MB | yum/dnf | 原生支持 | 信创验收要求 |
| 统信 UOS | ~200MB | apt | 原生支持 | 信创验收要求 |
| Amazon Corretto | 基于 Alpine | apk | 官方多架构 | 生产推荐 |
二、Amazon Corretto 8 JDK 镜像构建(Alpine 3.20)
2.1 完整 Dockerfile
# ============================================================
# 信创基础镜像:Amazon Corretto 8 JDK (Alpine 3.20)
# 支持架构:x86_64, aarch64(鲲鹏)
# 适用场景:Java 微服务基础运行环境
# ============================================================
FROM alpine:3.20
# ============================================================
# 镜像元信息
# ============================================================
LABEL maintainer="lin" \
description="Amazon Corretto 8 JDK for xinchuang" \
version="8u422" \
architecture.multiarch="true"
# ============================================================
# 环境变量
# ============================================================
# Corretto 版本(可通过构建参数覆盖)
ARG CORRETTO_VERSION=8.422.05.1
ARG CORRETTO_SHA256_AMD64=a7b7e2f8c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0
ARG CORRETTO_SHA256_AARCH64=b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9
ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-amazon-corretto \
PATH="/usr/lib/jvm/java-1.8.0-amazon-corretto/bin:${PATH}" \
LANG=en_US.UTF-8 \
LC_ALL=en_US.UTF-8 \
TZ=Asia/Shanghai \
# JVM 默认参数(可通过环境变量覆盖)
JAVA_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.security.egd=file:/dev/./urandom"
# ============================================================
# 安装基础依赖 + 配置国内镜像源
# ============================================================
# 使用阿里云镜像源加速(信创环境通常无法直接访问 dl-cdn.alpinelinux.org)
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk add --no-cache \
bash \
curl \
wget \
tzdata \
ca-certificates \
fontconfig \
ttf-dejavu \
busybox-extras \
procps \
gzip \
tar \
zip \
unzip \
&& rm -rf /var/cache/apk/*
# ============================================================
# 时区配置
# ============================================================
RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
echo "${TZ}" > /etc/timezone
# ============================================================
# Locale 配置
# ============================================================
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
LC_ALL=en_US.UTF-8
# ============================================================
# 安装 Amazon Corretto 8 JDK
# ============================================================
RUN ARCH=$(uname -m) && \
case "${ARCH}" in \
x86_64) CORRETTO_ARCH="x64" ;; \
aarch64) CORRETTO_ARCH="aarch64" ;; \
*) echo "Unsupported architecture: ${ARCH}" && exit 1 ;; \
esac && \
wget -q -O /tmp/corretto.tar.gz \
"https://corretto.aws/downloads/latest/amazon-corretto-${CORRETTO_VERSION}-linux-${CORRETTO_ARCH}-jdk.tar.gz" && \
mkdir -p /usr/lib/jvm && \
tar -xzf /tmp/corretto.tar.gz -C /usr/lib/jvm && \
ln -sf /usr/lib/jvm/amazon-corretto-${CORRETTO_VERSION}-linux-${CORRETTO_ARCH} \
/usr/lib/jvm/java-1.8.0-amazon-corretto && \
rm -f /tmp/corretto.tar.gz && \
java -version
# ============================================================
# 内置健康检查脚本:java-info
# ============================================================
RUN cat > /usr/local/bin/java-info << 'SCRIPT' && chmod +x /usr/local/bin/java-info
#!/bin/bash
echo "========================================="
echo " Java Environment Info"
echo "========================================="
echo ""
echo "📦 JDK Version:"
java -version 2>&1
echo ""
echo "📁 JAVA_HOME: ${JAVA_HOME}"
echo "🏗️ Architecture: $(uname -m)"
echo "🐧 OS: $(cat /etc/os-release 2>/dev/null | grep PRETTY_NAME | cut -d= -f2 | tr -d '"')"
echo "🕐 Timezone: $(cat /etc/timezone 2>/dev/null || echo 'not set')"
echo ""
echo "💾 Memory:"
free -h 2>/dev/null || echo " (free command not available)"
echo ""
echo "🔧 JVM System Properties (key ones):"
java -XshowSettings:all 2>&1 | grep -E "(java.home|os.arch|os.name|file.encoding|user.timezone)" | sed 's/^/ /'
echo ""
echo "========================================="
SCRIPT
WORKDIR /app
CMD ["bash"]2.2 构建与使用
# 构建镜像(单架构)
docker build -t xinchuang/corretto8-jdk:8u422-alpine3.20 .
# 验证
docker run --rm xinchuang/corretto8-jdk:8u422-alpine3.20 java-info三、Docker Buildx 多架构构建
3.1 Buildx 基础概念
Docker Buildx 是 Docker 的扩展构建工具,支持一次构建同时生成多架构镜像。在信创场景下,因此可以用一条命令同时构建 x86_64 和 ARM64 的镜像。
多架构镜像的体积公式:
Manifest 总大小 = 各架构 Layer Size 之和 + Manifest Overhead
其中 n 是目标架构数,每个架构有独立的层(layer)集合。
3.2 创建 Buildx Builder
# 创建支持多架构的 builder(使用 docker-container 驱动)
docker buildx create \
--name xinchuang-builder \
--driver docker-container \
--driver-opt network=host \
--bootstrap --use
# 查看已创建的 builder
docker buildx ls
# 安装 QEMU 用户态模拟(用于非本机架构的交叉编译)
docker run --rm --privileged multiarch/qemu-user-static --reset -p yesdocker-container 驱动支持多平台构建,但镜像不会自动加载到本地 Docker Engine。多架构产物建议用 --push 直接推送到 Registry;本地调试单架构时再用 --load 或 --output type=docker。如果使用 Docker Engine 29.0+ 并启用了 containerd image store,则原生支持多平台。3.3 多架构构建命令
# 构建并推送多架构镜像到 Registry
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t xinchuang.nexus.com/base/corretto8-jdk:8u422-alpine3.20 \
--push .
# 本地调试建议只加载单架构镜像;经典 Docker image store 不能直接 load 多架构 manifest
docker buildx build \
--platform linux/arm64 \
-t xinchuang/corretto8-jdk:8u422-alpine3.20-arm64 \
--load .
# 仅构建特定架构(调试用)
docker buildx build \
--platform linux/arm64 \
-t xinchuang/corretto8-jdk:8u422-alpine3.20-arm64 \
--load .3.4 多架构 Dockerfile 中的条件处理
# ============================================================
# 多架构自适应 Dockerfile
# 通过 ARG + 条件判断实现不同架构的差异化配置
# ============================================================
FROM alpine:3.20
ARG TARGETARCH # Docker buildx 自动注入
# 根据架构设置不同的镜像源
RUN if [ "${TARGETARCH}" = "arm64" ]; then \
# 鲲鹏 ARM64:使用华为云镜像源(速度更快)
sed -i 's/dl-cdn.alpinelinux.org/repo.huaweicloud.com/g' /etc/apk/repositories; \
elif [ "${TARGETARCH}" = "sw64" ]; then \
# 申威:使用内部镜像源(通常无法访问公网)
echo "http://internal-mirror.example.com/alpine/v3.20/main" > /etc/apk/repositories; \
else \
# x86_64:使用阿里云镜像源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories; \
fi--cache-from 和 --cache-to 可以将构建缓存存储在 Registry 或本地目录,显著加速多架构构建:docker buildx build --cache-from type=registry,ref=xinchuang.nexus.com/cache/corretto8 --cache-to type=registry,ref=xinchuang.nexus.com/cache/corretto8,mode=max --platform linux/amd64,linux/arm64 ...四、Amazon Corretto 8 JRE 镜像构建(精简版)
生产环境中,通常不需要完整的 JDK,JRE 足以运行 Java 应用。JRE 与 JDK 的镜像层大小对比:
JRE 节省 = JDK Size - JRE Size ≈ 150MB
节省比例 = (350 - 200) / 350 × 100% ≈ 43%
# ============================================================
# 信创精简镜像:Amazon Corretto 8 JRE (Alpine 3.20)
# 适用于:生产环境 Java 应用运行时
# ============================================================
FROM alpine:3.20
ARG CORRETTO_VERSION=8.422.05.1
ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-amazon-corretto-jre \
PATH="/usr/lib/jvm/java-1.8.0-amazon-corretto-jre/bin:${PATH}" \
LANG=en_US.UTF-8 \
TZ=Asia/Shanghai \
JAVA_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UseStringDeduplication -Djava.security.egd=file:/dev/./urandom"
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk add --no-cache bash curl tzdata ca-certificates fontconfig ttf-dejavu && \
ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
echo "${TZ}" > /etc/timezone
RUN ARCH=$(uname -m) && \
case "${ARCH}" in \
x86_64) CORRETTO_ARCH="x64" ;; \
aarch64) CORRETTO_ARCH="aarch64" ;; \
*) echo "Unsupported architecture: ${ARCH}" && exit 1 ;; \
esac && \
wget -q -O /tmp/corretto-jre.tar.gz \
"https://corretto.aws/downloads/latest/amazon-corretto-${CORRETTO_VERSION}-linux-${CORRETTO_ARCH}-jre.tar.gz" && \
mkdir -p /usr/lib/jvm && \
tar -xzf /tmp/corretto-jre.tar.gz -C /usr/lib/jvm && \
ln -sf /usr/lib/jvm/amazon-corretto-${CORRETTO_VERSION}-linux-${CORRETTO_ARCH}-jre \
/usr/lib/jvm/java-1.8.0-amazon-corretto-jre && \
rm -f /tmp/corretto-jre.tar.gz && \
# 删除不必要的文件(进一步瘦身)
rm -rf /usr/lib/jvm/*/lib/src.zip \
/usr/lib/jvm/*/lib/missioncontrol \
/usr/lib/jvm/*/lib/visualvm \
/var/cache/apk/*
WORKDIR /app
CMD ["bash"]镜像体积对比:
| 镜像类型 | 大约体积 | 说明 |
|---|---|---|
| JDK(Alpine) | ~350MB | 含编译器、调试工具 |
| JRE(Alpine) | ~200MB | 仅运行时 |
| JRE + 瘦身 | ~170MB | 删除 src.zip、VisualVM 等 |
五、多架构支持(x86_64、aarch64、sw_64)
5.1 国产 CPU 的镜像源配置
鲲鹏 ARM64(华为云源)
# 鲲鹏 ARM64 专用镜像源
RUN sed -i 's/dl-cdn.alpinelinux.org/repo.huaweicloud.com/g' /etc/apk/repositories
# 如果使用 Ubuntu 基础镜像
RUN sed -i 's|ports.ubuntu.com|mirrors.huaweicloud.com|g' /etc/apt/sources.list龙芯 LoongArch(需自建本地源)
龙芯官方系统为 Loongnix / LoongOS,可从龙芯开源社区(www.loongnix.cn)获取 ISO 安装介质。但公网可访问的软件源非常有限,生产环境必须自建本地镜像源。
# 龙芯 LoongArch 镜像源(指向自建本地源)
# 先从 www.loongnix.cn 下载 ISO,挂载后用 aptly 或 reprepro 导入为本地 apt 源
RUN echo "deb http://nexus.example.com/repos/loongnix/20.3/ fusco main" > /etc/apt/sources.list && \
echo "deb http://nexus.example.com/repos/loongnix/20.3-updates/ fusco main" >> /etc/apt/sources.list申威 SW64(需自建内部源)
申威平台没有任何公网可用的软件镜像源。Alpine、Ubuntu、Debian 均不支持 sw64 架构。实际项目中需要从统信 UOS 或麒麟 V10 厂商处获取申威平台的安装介质(ISO),然后基于此自建内部 yum/apt 源。JDK 等关键组件也需要从申威生态合作伙伴获取预编译版本。
# 申威 SW64 镜像源(指向自建内部 yum 源)
# 基于统信 UOS / 麒麟 V10 的 ISO 提取 RPM 包后,用 createrepo 创建本地 yum 源
RUN echo "[internal-sw64]" > /etc/yum.repos.d/internal.repo && \
echo "name=Internal SW64 Mirror" >> /etc/yum.repos.d/internal.repo && \
echo "baseurl=http://nexus.example.com/repos/sw64/" >> /etc/yum.repos.d/internal.repo && \
echo "gpgcheck=0" >> /etc/yum.repos.d/internal.repo && \
echo "enabled=1" >> /etc/yum.repos.d/internal.repo5.2 自建内部镜像源(信创必备)
信创项目中,自建内部镜像源并非可选项,重点是必选项。原因如下:
- 架构支持不足:Alpine/Ubuntu/Debian 官方源均不支持申威 sw64 和龙芯 loongarch64,必须使用国产 OS 并自建源
- 公网源稀缺:龙芯公网源内容有限且不稳定,申威完全没有公网源
- 安全合规:信创项目通常要求所有软件包经过内部安全审计,不能直接从公网拉取
- 离线部署:很多信创环境物理隔离,无法访问互联网
Nexus 3 搭建 Docker Registry
# 使用 Nexus 3 搭建私有 Docker Registry
# 1. 部署 Nexus 3(可容器化或直接安装)
docker run -d --name nexus \
-p 8081:8081 -p 5000:5000 \
-v /opt/nexus-data:/nexus-data \
sonatype/nexus3:latest
# 2. 在 Nexus Web UI 中创建 Docker (hosted) 仓库,端口 5000
# 3. 推送镜像
# docker tag xinchuang/corretto8-jdk:latest nexus.example.com:5000/base/corretto8-jdk:latest
# docker push nexus.example.com:5000/base/corretto8-jdk:latestapt 本地源搭建(Debian/Ubuntu/Loongnix)
# 使用 aptly 管理 apt 本地源
aptly repo create -distribution=fusco loongnix-main
aptly repo add loongnix-main /path/to/loongnix-packages/
aptly publish repo -architectures="loongarch64" loongnix-main filesystem:loongnix:yum 本地源搭建(统信 UOS / 麒麟 V10 / 申威)
# 使用 createrepo 管理 yum 本地源
# 1. 将 ISO 挂载并拷贝 RPM 包到本地目录
mkdir -p /opt/repos/sw64/Packages
cp /mnt/iso/Packages/*.rpm /opt/repos/sw64/Packages/
# 2. 创建 yum 仓库元数据
createrepo /opt/repos/sw64/
# 3. 通过 Nginx 或 Nexus 提供 HTTP 访问从有网环境同步依赖到离线环境
# 方式一:rsync 同步(适用于同网络段)
rsync -avz --progress /opt/repos/ user@offline-server:/opt/repos/
# 方式二:容器镜像导出/导入(推荐用于 Docker 镜像离线传输)
# 有网环境导出
docker save -o corretto8-jdk.tar xinchuang/corretto8-jdk:8u422-alpine3.20
# 通过介质传输后导入
docker load -i corretto8-jdk.tar
# 方式三:多架构镜像先推送到内部 Registry,再在离线环境按目标架构拉取
# docker buildx imagetools inspect xinchuang.nexus.com/base/corretto8-jdk:8u422
# docker pull --platform linux/arm64 xinchuang.nexus.com/base/corretto8-jdk:8u4225.3 JDK 安装的架构适配
# ============================================================
# 通用 JDK 安装逻辑(支持多架构自动适配)
# ============================================================
RUN ARCH=$(uname -m) && \
echo "Detected architecture: ${ARCH}" && \
case "${ARCH}" in \
# Intel/AMD x86_64
x86_64) \
wget -q -O /tmp/jdk.tar.gz \
"https://corretto.aws/downloads/latest/amazon-corretto-8.422.05.1-linux-x64-jdk.tar.gz" \
;; \
# 鲲鹏/飞腾 ARM64
aarch64) \
wget -q -O /tmp/jdk.tar.gz \
"https://corretto.aws/downloads/latest/amazon-corretto-8.422.05.1-linux-aarch64-jdk.tar.gz" \
;; \
# 申威 SW64(需要本地预编译的 JDK)
sw_64|sw64) \
if [ -f /opt/swjdk/swjdk-8.tar.gz ]; then \
cp /opt/swjdk/swjdk-8.tar.gz /tmp/jdk.tar.gz; \
else \
echo "ERROR: SW64 JDK not found at /opt/swjdk/" && exit 1; \
fi \
;; \
# 龙芯 LoongArch
loongarch64) \
if [ -f /opt/loongjdk/loongjdk-8.tar.gz ]; then \
cp /opt/loongjdk/loongjdk-8.tar.gz /tmp/jdk.tar.gz; \
else \
echo "ERROR: LoongArch JDK not found at /opt/loongjdk/" && exit 1; \
fi \
;; \
*) \
echo "ERROR: Unsupported architecture: ${ARCH}" && exit 1 \
;; \
esac && \
mkdir -p /usr/lib/jvm && \
tar -xzf /tmp/jdk.tar.gz -C /usr/lib/jvm && \
rm -f /tmp/jdk.tar.gz六、成熟实践
6.1 多阶段构建
多阶段构建是镜像瘦身的核心手段。Docker 镜像层大小优化遵循以下原则:
末尾镜像大小 = 所有运行时必要文件的 Layer 之和
即末尾镜像只保留运行阶段的层,编译阶段的中间产物(Maven 缓存、编译器、源码等)全部丢弃。
# ============================================================
# 多阶段构建示例:编译 + 运行分离
# ============================================================
# 阶段 1:编译(使用完整 JDK)
FROM xinchuang/corretto8-jdk:8u422-alpine3.20 AS builder
WORKDIR /build
COPY pom.xml .
# 先下载依赖(利用 Docker 缓存层)
RUN mvn dependency:go-offline -B
COPY src ./src
RUN mvn package -DskipTests -B && \
cp target/*.jar app.jar
# 阶段 2:运行(使用精简 JRE)
FROM xinchuang/corretto8-jre:8u422-alpine3.20
WORKDIR /app
COPY --from=builder /build/app.jar ./app.jar
EXPOSE 8080
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar app.jar ${0} ${@}"]COPY pom.xml),常变动的放在后面(如 COPY src)。这样 Maven 依赖下载层可以被缓存命中,只在源码变更时重新编译。6.2 镜像瘦身策略
# 在同一个 RUN 指令中完成安装 + 清理(减少层数)
RUN apk add --no-cache package1 package2 && \
rm -rf /var/cache/apk/* /tmp/* /root/.cache常用瘦身手段:
| 手段 | 效果 | 适用场景 |
|---|---|---|
| 多阶段构建 | 减少 50%+ | 编译型应用 |
| JRE 替代 JDK | 减少 ~43% | 生产运行时 |
| Alpine 基础镜像 | 减少 ~80% vs Ubuntu | 通用 |
.dockerignore | 减少构建上下文 | 所有项目 |
| 删除文档/源码 | 减少 10-30MB | 所有 Java 镜像 |
6.3 安全扫描
# 使用 Trivy 扫描镜像漏洞
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy image xinchuang/corretto8-jdk:8u422-alpine3.20
# 使用 Docker Scout(Docker Desktop 内置)
docker scout cves xinchuang/corretto8-jdk:8u422-alpine3.20
# 常见修复:
# 1. 定期更新基础镜像(Alpine 版本)
# 2. 升级 JDK 到最新安全补丁版本
# 3. 移除不必要的工具(curl、wget 在生产镜像中可以不装)--severity HIGH,CRITICAL --exit-code 1 作为流水线卡点。6.4 版本管理
# 镜像标签规范
# 格式:<registry>/<namespace>/<image>:<jdk-version>-<base-os><os-version>[-<arch>]
# 示例:
xinchuang.nexus.com/base/corretto8-jdk:8u422-alpine3.20
xinchuang.nexus.com/base/corretto8-jdk:8u422-alpine3.20-arm64
xinchuang.nexus.com/base/corretto8-jdk:8u422-kylin10七、生产环境示例:Nacos 服务镜像
将前面构建的基础镜像应用到实际服务:
# ============================================================
# Nacos 信创生产镜像
# 基于自建 Corretto8 JDK 基础镜像
# ============================================================
FROM xinchuang.nexus.com/base/corretto8-jdk:8u422-alpine3.20
ARG NACOS_VERSION=2.3.2
ENV NACOS_HOME=/opt/nacos \
MODE=standalone \
SPRING_DATASOURCE_PLATFORM=""
# 安装 Nacos
RUN wget -q -O /tmp/nacos.tar.gz \
"https://github.com/alibaba/nacos/releases/download/${NACOS_VERSION}/nacos-server-${NACOS_VERSION}.tar.gz" && \
mkdir -p ${NACOS_HOME} && \
tar -xzf /tmp/nacos.tar.gz -C /opt/ && \
mv /opt/nacos-server-${NACOS_VERSION}/* ${NACOS_HOME}/ && \
rm -rf /tmp/nacos.tar.gz /opt/nacos-server-${NACOS_VERSION}
# 注入国产 CPU 的 RocksDB JNI 库(如果有)
COPY librocksdbjni-*.so /tmp/rocksdbjni-patch/
RUN if ls /tmp/rocksdbjni-patch/librocksdbjni-*.so 1>/dev/null 2>&1; then \
echo "Patching RocksDB JNI for native architecture..."; \
/opt/scripts/patch-nacos-rocksdb.sh ${NACOS_HOME}/target/nacos-server.jar /tmp/rocksdbjni-patch/*.so; \
fi && \
rm -rf /tmp/rocksdbjni-patch
WORKDIR ${NACOS_HOME}
EXPOSE 8848 9848 9849
ENTRYPOINT ["sh", "-c", "${NACOS_HOME}/bin/startup.sh -m ${MODE} && tail -f ${NACOS_HOME}/logs/start.out"]八、.dockerignore 成熟实践
创建 .dockerignore 文件,减少构建上下文大小:
# .dockerignore
.git
.gitignore
*.md
!README.md
target/
!target/*.jar
.idea/
*.iml
.DS_Store
node_modules/
logs/
*.log构建上下文大小影响:
Build Context 传输时间 = Context Size / 网络带宽
排除不必要的文件可以将构建上下文从数百 MB 压缩到数十 MB,显著提升 docker build 启动速度。
九、总结
镜像构建 Checklist
□ 确认目标 CPU 架构(x86_64 / aarch64 / sw64 / loongarch64)
□ 选择基础镜像(Alpine / Ubuntu / 麒麟 / 统信)
□ 配置国内镜像源(阿里云 / 华为云 / 内部源)
□ 安装 JDK/JRE(Corretto / 申威定制 JDK / 龙芯定制 JDK)
□ 设置时区(Asia/Shanghai)和 Locale
□ 安装必要工具(curl、tzdata、ca-certificates)
□ 多阶段构建分离编译和运行环境
□ 镜像瘦身(清理缓存、删除不必要文件)
□ 安全扫描(Trivy / Docker Scout)
□ 规范化标签管理
□ 创建 .dockerignore
□ 推送到内部镜像仓库架构速查
| 场景 | 推荐方案 |
|---|---|
| 快速开发验证 | 直接用 Corretto 官方镜像 |
| 鲲鹏 ARM64 生产 | Corretto + Alpine + buildx 多架构构建 |
| 申威/龙芯生产 | 基于国产 OS + 定制 JDK 自行构建 |
| 信创安全审查 | 基于麒麟/统信 + Trivy 安全扫描 |