鲲鹏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. 更新镜像
更改各个业务系统的镜像地址,看业务是否正确启动。