2024 年云原生运维实战文档 99 篇原创计划 第 020 篇 |Docker 最佳实战「2024」系列 第 012 篇
你好,欢迎来到运维有术。
今天分享的内容是 Docker 最佳实战「2024」 系列文档中的 Docker 构建 XXL-JOB ARM 架构镜像。
分布式任务调度平台 XXL-JOB 在 DockerHub 上只提供了 amd64 架构的镜像,没有 ARM 架构的。
本文将详细介绍如何在 Mac 电脑上自己构建 XXL-JOB ARM 架构的 Docker 镜像,以满足适配国产化项目的需求。
本文适用于 M1 芯片 以上,任何型号的 Mac 电脑,我用的是 M1 芯片的 Mac Mini。
如果是非 Mac 设备的 ARM 芯片的 Linux 服务器,Java 安装包需要换成 Linux 版本的。 其他的操作流程和方式基本一致。
本文没有采用 Docker 的多阶段构建方式,而是采用了在自己电脑安装编译环境的构建方式。
构建环境:
源码包及构建工具安装路径(请根据实际情况调整):
在 macOS Java 8 下载地址 下载 Java 安装包 jdk-8u411-macosx-aarch64.tar.gz
。
tar xvf ~/tools/src/jdk-8u411-macosx-aarch64.tar.gz -C ~/tools/
编辑环境变量配置文件,vi ~/.zshrc
,在文件末尾加入以下内容:
# Java
export JAVA_HOME=~/tools/jdk1.8.0_411.jdk/Contents/Home
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
source ~/.zshrc
$ java -version
java version "1.8.0_411"
Java(TM) SE Runtime Environment (build 1.8.0_411-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.411-b09, mixed mode)
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz -P ~/tools/src/
tar xvf ~/tools/src/apache-maven-3.8.8-bin.tar.gz -C ~/tools/
编辑环境变量配置文件,vi ~/.zshrc
,在文件末尾加入以下内容:
# Maven
export MAVEN_HOME=~/tools/apache-maven-3.8.8
export PATH=$PATH:${MAVEN_HOME}/bin
source ~/.zshrc
$ mvn -version
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: /Users/opsxlab/tools/apache-maven-3.8.8
Java version: 1.8.0_411, vendor: Oracle Corporation, runtime: /Users/opsxlab/tools/jdk1.8.0_411.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "14.5", arch: "aarch64", family: "mac"
添加阿里云的 maven 仓库,是为了加快 Jar 依赖包的下载速度和成功率,你可以根据网络情况参考配置。
编辑 maven 的配置文件 settings.xml,vi ~/tools/apache-maven-3.8.8/conf/settings.xml
。
在 <mirrors></mirrors>
标签中添加 mirror 子节点:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
cd ~/code/gitee
git clone http://gitee.com/xuxueli0323/xxl-job
本文基于 tag v2.2.0 编译构建 jar 包,你可以根据需求选择相应的代码分支或是 tag。
cd ~/code/gitee/xxl-job
git checkout v2.2.0
mvn clean package -Dmaven.test.skip=true
正确执行后,输出结果如下 :
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for xxl-job 2.2.0:
[INFO]
[INFO] xxl-job ............................................ SUCCESS [ 0.055 s]
[INFO] xxl-job-core ....................................... SUCCESS [ 1.113 s]
[INFO] xxl-job-admin ...................................... SUCCESS [ 1.631 s]
[INFO] xxl-job-executor-samples ........................... SUCCESS [ 0.001 s]
[INFO] xxl-job-executor-sample-frameless .................. SUCCESS [ 0.057 s]
[INFO] xxl-job-executor-sample-springboot ................. SUCCESS [ 0.145 s]
[INFO] xxl-job-executor-sample-spring ..................... SUCCESS [ 0.608 s]
[INFO] xxl-job-executor-sample-jfinal ..................... SUCCESS [ 0.697 s]
[INFO] xxl-job-executor-sample-nutz ....................... SUCCESS [ 0.658 s]
[INFO] xxl-job-executor-sample-jboot ...................... SUCCESS [ 0.299 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.377 s
[INFO] Finished at: 2024-05-15T15:00:45+08:00
[INFO] ------------------------------------------------------------------------
说明: 上面的输出结果是第二次编译的结果,第一次会下载很多 jar 依赖包,耗时依赖网络。
$ ls xxl-job-admin/target
classes maven-archiver xxl-job-admin-2.2.0.jar
generated-sources maven-status xxl-job-admin-2.2.0.jar.original
Docker 镜像的 tag 命名规则跟 xxl-job 官方保持一致,但是使用了 opsxlab 的前缀,请你根据实际情况修改。
XXL-JOB 源码中自带 Dockerfile,直接使用 Maven 构建出的 jar 包,执行下面的命令,构建 Docker 镜像。
cd xxl-job-admin
docker build -t opsxlab/xxl-job-admin:2.2.0 .
正确执行后,输出结果如下 :
$ docker build -t opsxlab/xxl-job-admin:2.2.0 .
[+] Building 16.8s (9/9) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 329B 0.0s
=> [internal] load metadata for docker.io/library/openjdk:8-jre-slim 16.3s
=> [auth] library/openjdk:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/library/openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5 0.0s
=> [internal] load build context 0.3s
=> => transferring context: 39.03MB 0.3s
=> CACHED [2/3] RUN ln -snf /usr/share/zoneinfo/PRC /etc/localtime && echo PRC > /etc/timezone 0.0s
=> [3/3] ADD target/xxl-job-admin-*.jar /app.jar 0.1s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:b76aeccf6a21a77b3890a9e9156edcbebe41d1e2872086e2b536cb873a537f1d 0.0s
=> => naming to docker.io/opsxlab/xxl-job-admin:2.2.0 0.0s
$ docker inspect opsxlab/xxl-job-admin:2.2.0 | grep "Architecture"
"Architecture": "arm64",
docker push opsxlab/xxl-job-admin:2.2.0
部署验证需要搭建数据库,本文略,请自行完成测试。
以上,就是我今天分享的全部内容。下一期分享的内容还没想好,敬请期待开盲盒。
如果你喜欢本文,请分享、收藏、点赞、评论! 请持续关注 @运维有术,及时收看更多好文!
免责声明:
版权声明
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。