戴志强1
Published on 2026-07-16 / 22 Visits
0
0

鲲鹏ARM64服务器适配imom系统

鲲鹏ARM64服务器适配imom系统

以下记录在鲲鹏920服务器, openEuler 24.03 (LTS) 操作系统适配imom业务系统的过程。

1. imom基础镜像适配

1.1 前端镜像

创建 Dockerfile:

FROM  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.27.5-linuxarm64

COPY qemu-aarch64-static /usr/bin/qemu-aarch64-static

COPY nginx_dev.conf /etc/nginx/conf.d/default.conf
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

COPY html /usr/share/nginx/html/

ENTRYPOINT ["/entrypoint.sh"]

构建镜像:

docker build . -t 192.168.168.207:30002/private/app-ui:v0.0.64-aarch64

1.2 后端基础镜像

创建适用于旧版本imom的后端基础镜像

# ===============================
# 基础镜像
# ===============================
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ubuntu:20.04-linuxarm64

# ===============================
# 维护者信息
# ===============================
MAINTAINER daizhiqiang

COPY qemu-aarch64-static /usr/bin/qemu-aarch64-static
RUN chmod +x /usr/bin/qemu-aarch64-static
# ===============================
# 环境变量设置
# ===============================
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH=${JAVA_HOME}/bin:${PATH}
ENV LANG=en_US.UTF-8 \
    LANGUAGE=en_US:en \
    LC_ALL=en_US.UTF-8

# ===============================
# 安装基础依赖并配置系统
# ===============================
RUN set -eux; \
    apt-get update; \
    DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        curl \
        wget \
        fontconfig \
        ca-certificates \
        p11-kit \
        tzdata \
        locales \
    ; \
    echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; \
    locale-gen en_US.UTF-8; \
    rm -rf /var/lib/apt/lists/*

# ===============================
# 安装 Java 8 (Adoptium Temurin)
# 直接从本地复制压缩包并解压
# ===============================
ENV JAVA_VERSION=jdk21

# 将本地的 JDK 压缩包复制到容器中
COPY OpenJDK21U-jdk_aarch64_linux_hotspot_21.0.11_10.tar.gz /tmp/openjdk.tar.gz

RUN set -eux; \
    mkdir -p "$JAVA_HOME"; \
    tar --extract --file /tmp/openjdk.tar.gz --directory "$JAVA_HOME" --strip-components 1 --no-same-owner; \
    rm -f /tmp/openjdk.tar.gz ${JAVA_HOME}/lib/src.zip; \
    find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; \
    ldconfig

# ===============================
# 验证 Java 安装
# ===============================
RUN set -eux; \
    echo "Verifying install ..."; \
    javac -version; \
    java -version; \
    echo "Complete."

# ===============================
# 复制 Entrypoint 脚本
# ===============================
#COPY entrypoint.sh /__cacert_entrypoint.sh
#ENTRYPOINT ["/__cacert_entrypoint.sh"]

# ===============================
# 后续构建层
# ===============================

# 安装 dmidecode 和 iproute2 工具
RUN apt-get update && apt-get -y install dmidecode iproute2

# 复制获取网卡 MAC 地址的脚本并赋予执行权限
#COPY get_eth_mac.sh /usr/local/bin/get_eth_mac.sh
#RUN chmod 755 /usr/local/bin/get_eth_mac.sh

# 默认命令
CMD ["/bin/bash"]

构建镜像:

docker build . -t 192.168.168.207:30002/private/jdk21:0.0.1-arm64

创建适用于新版本的imom的后端基础镜像:

# ===============================
# 基础镜像
# ===============================
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ubuntu:20.04-linuxarm64

# ===============================
# 元数据与环境配置
# ===============================
LABEL maintainer="daizhiqiang"
ENV TZ=Asia/Shanghai

# ===============================
# 基础依赖与配置
# ===============================
# 1. 复制 QEMU 静态二进制文件以支持跨架构构建
COPY qemu-aarch64-static /usr/bin/qemu-aarch64-static
RUN chmod +x /usr/bin/qemu-aarch64-static

# 2. 配置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 3. 安装基础工具并清理缓存
RUN apt-get update && \
    apt-get install -y tar && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# ===============================
# GraalVM JDK 21 安装
# ===============================
# 1. 复制安装包到临时目录
COPY graalvm-community-jdk-21.0.2_linux-aarch64_bin.tar.gz /tmp/

# 2. 解压、重命名、配置环境变量并清理
RUN tar -zxvf /tmp/graalvm-community-jdk-21.0.2_linux-aarch64_bin.tar.gz -C /usr/local && \
    mv /usr/local/graalvm-community-openjdk-21.0.2+13.1 /usr/local/graalvm-jdk21 && \
    echo "export PATH=/usr/local/graalvm-jdk21/bin:\$PATH" >> /etc/profile && \
    rm -rf /tmp/*

# 3. 设置环境变量
ENV JAVA_HOME=/usr/local/graalvm-jdk21
ENV PATH=${JAVA_HOME}/bin:${PATH}

# ===============================
# 验证安装
# ===============================
RUN java -version && echo "GraalVM 21 installed successfully!"

构建镜像:

docker build . -t 192.168.168.207:30002/private/java/ub-graalvm-jdk:21-arm64 -f Dockerfile_graalvm_jdk21

创建适用于旧版的imom-base镜像:

FROM 192.168.168.207:30002/private/jdk21:0.0.1-arm64
# 作者
MAINTAINER daizhiqiang
# 解决时差8小时问题
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

CMD ["/bin/sh", "-c", "apt-get update && apt-get install -y fonts-liberation"]

# 字体
COPY fonts/*  /usr/share/fonts/
#
COPY app.jar  /app.jar

# JVM配置
ENV JVM_OPTS=""
ENV PROFILES_ACTIVE=dev

ENTRYPOINT java ${JVM_OPTS} -Dspring.profiles.active=${PROFILES_ACTIVE} -jar /app.jar

构造镜像:

docker build -t  192.168.168.207:30002/private/jdk21-imom-base:0.0.1-arm64  -f Dockerfile_imom_base  .

1.3 后端镜像(旧版)

以kernel为例, Dockerfile如下:

FROM 192.168.168.207:30002/private/jdk21-imom-base:0.0.1-arm64

COPY app.jar /app.jar

构建镜像:

docker build . -t 192.168.168.207:30002/private/imom-kernel:dev-20260630.265-aarch64

1.4 后端镜像(新版imom-server)

以imom-server为例, Dockerfile如下:

FROM 192.168.168.207:30002/private/java/ub-graalvm-jdk:21-arm64

# 解决时差8小时问题
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update
# 新增 fontconfig libfreetype6 字体依赖
RUN apt-get install -y fonts-liberation fontconfig libfreetype6
RUN apt-get install -y curl
RUN apt-get install -y wget
# 字体
COPY fonts/*  /usr/share/fonts/
# 刷新字体缓存
RUN fc-cache -fv
#jar
# JVM配置 增加无头参数
ENV JVM_OPTS="-Djava.awt.headless=true"
ENV PROFILES_ACTIVE=dev
COPY app.jar /app.jar
COPY dependency /dependency
ENTRYPOINT java ${JVM_OPTS} -Dspring.profiles.active=${PROFILES_ACTIVE} -jar --module-path=/dependency --add-modules=org.graalvm.truffle --add-exports=org.graalvm.truffle/com.oracle.truffle.api.debug.impl=ALL-UNNAMED /app.jar

构建镜像:

docker build . -t 192.168.168.207:30002/imom/imom-server:test-20260708.313-aarch64

2. 更新镜像

更改各个业务系统的镜像地址,看业务是否正确启动。


Comment