docker打包arm64架构下,java基础镜像。
一、获取基础镜像
下面将介绍如何在docker.io不能访问的情况下获取所需的镜像。
1.1 DockerTarBuilder
项目地址:DockerTarBuilder
此项目用来获取并构建所需的镜像。最终生成一个tar包,下载后导入本地可以直接使用。
访问项目后,将项目fork到自己的git下。
选择Actions:
在左侧可以看到不同架构的流水线:
选择arm64架构,进入如下界面:
搜索自己所需的镜像。如我所需的alpine:latest,点击Run workflow后,进入镜像下载流程:
下载完成后,直接通过下载即可得到该镜像的tar包:
1.2 安装镜像到本地
将1.1获取的压缩包打开,内部的tar包才是我们需要的:
将tar包加载到本地docker中:
docker load --input .\latest-arm64.tar
使用 docker images查看镜像:
如果在需要部署的环境中有远程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 .
三、构建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 .
到此,完成全部的镜像构建流程。