本地构建ARM64架构java镜像

540 阅读2分钟

docker打包arm64架构下,java基础镜像。

一、获取基础镜像

下面将介绍如何在docker.io不能访问的情况下获取所需的镜像。

1.1 DockerTarBuilder

项目地址:DockerTarBuilder

此项目用来获取并构建所需的镜像。最终生成一个tar包,下载后导入本地可以直接使用。

访问项目后,将项目fork到自己的git下。

选择Actions

image.png

在左侧可以看到不同架构的流水线:

image.png

选择arm64架构,进入如下界面:

image.png

搜索自己所需的镜像。如我所需的alpine:latest,点击Run workflow后,进入镜像下载流程:

image.png

下载完成后,直接通过下载即可得到该镜像的tar包:

image.png

1.2 安装镜像到本地

将1.1获取的压缩包打开,内部的tar包才是我们需要的:

image.png

将tar包加载到本地docker中:

docker load --input .\latest-arm64.tar

使用 docker images查看镜像:

image.png

如果在需要部署的环境中有远程harbor地址,建议修改此镜像的路径和名称和harbor同步,上传至harbor以备后续使用:

docker tag alpine:latest harbor.xxxxxx.com/public/alpine:latest

二、构建基础镜像

将上文获取到的镜像进行构建,打包成运行java程序所需的基础镜像,该镜像必备的就是jdk,以openjdk1.8为例。

2.1 创建Dockerfile

FROM --platform=linux/arm64 harbor.xxxxxxxx.com/public/alpine:latest
 
RUN echo "https://mirrors.aliyun.com/alpine/v3.19/main/" > /etc/apk/repositories && \
    echo "https://mirrors.aliyun.com/alpine/v3.19/community/" >> /etc/apk/repositories
 
RUN apk add --no-cache openjdk8
 
CMD ["java","-version"]

如上所示,需要注意的是--platform=linux/arm64参数,没有此参数将不能正确构建镜像,alpine是arm64的,所以构建后的镜像,也要保证是arm64的,此处要指定此参数。

2.2 docker build

使用以下命令

docker build -f ./Dockerfile -t  harbor.xxxxxxxxxx.com/public/openjdk:8-jdk-alpine-arm .

image.png

三、构建java服务镜像

3.1 创建Dockerfile

FROM --platform=linux/arm64 harbor.xxxxxx.com/public/openjdk:8-jdk-alpine-arm
ADD target/lib/ ./lib/
ADD target/log-server-api.jar app.jar

EXPOSE 10001
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom  -Duser.timezone=GMT+08  -Dfile.endcoding=UTF-8  -Dlog4j2.formatMsgNoLookups=true -Dloader.path=./lib -jar app.jar

需要注意的是--platform=linux/arm64参数,保证整个镜像由内至外都是arm64架构的。

3.2 docker build

docker build -f ./Dockerfile -t harbor.xxxxxx.com/bdh/log-server:base-1 .

到此,完成全部的镜像构建流程。