Docker 最佳实战:Docker 构建 XXL-JOB ARM 架构镜像
2024 年云原生运维实战文档 99 篇原创计划 第 020 篇 |Docker 最佳实战「2024」系列 第 012 篇
你好,欢迎来到运维有术。
今天分享的内容是 Docker 最佳实战「2024」 系列文档中的 Docker 构建 XXL-JOB ARM 架构镜像。
分布式任务调度平台 XXL-JOB 在 DockerHub 上只提供了 amd64 架构的镜像,没有 ARM 架构的。
本文将详细介绍如何在 Mac 电脑上自己构建 XXL-JOB ARM 架构的 Docker 镜像,以满足适配国产化项目的需求。
1. 前置条件
本文适用于 M1 芯片 以上,任何型号的 Mac 电脑,我用的是 M1 芯片的 Mac Mini。
如果是非 Mac 设备的 ARM 芯片的 Linux 服务器,Java 安装包需要换成 Linux 版本的。 其他的操作流程和方式基本一致。
本文没有采用 Docker 的多阶段构建方式,而是采用了在自己电脑安装编译环境的构建方式。
构建环境:
- Maven3 (3.8.8)
- Jdk1.8 (jdk-8u411)
- Mysql8.0 (只打包不需要)
源码包及构建工具安装路径(请根据实际情况调整):
- 源码包存放路径: ~/tools/src
- 构建工具安装路径: ~/tools/
- XXL-JOB 源码包: ~/code/gitee/
2. 安装编译工具
2.1 安装 Java 1.8
- 下载解压即用版的 Java
在 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:.
- 查看 Java 版本,验证是否安装成功
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)
2.2 安装 Maven
- 下载解压即用版的 Maven
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
- 查看 Maven 版本,验证是否安装成功
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 仓库(可选)
添加阿里云的 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>
3. 编译 XXL-JOB Jar 包
3.1 下载 XXL-JOB 源码包
代码语言:bash复制cd ~/code/gitee
git clone http://gitee.com/xuxueli0323/xxl-job
3.2 编译构建 jar 包
本文基于 tag v2.2.0 编译构建 jar 包,你可以根据需求选择相应的代码分支或是 tag。
代码语言:bash复制cd ~/code/gitee/xxl-job
git checkout v2.2.0
mvn clean package -Dmaven.test.skip=true
正确执行后,输出结果如下 :
代码语言:bash复制[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 依赖包,耗时依赖网络。
3.3 查看成功编译的 jar 包
代码语言:bash复制$ 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
4. 构建 XXL-JOB Docker 镜像
4.1 构建 Docker 镜像
Docker 镜像的 tag 命名规则跟 xxl-job 官方保持一致,但是使用了 opsxlab 的前缀,请你根据实际情况修改。
XXL-JOB 源码中自带 Dockerfile,直接使用 Maven 构建出的 jar 包,执行下面的命令,构建 Docker 镜像。
代码语言:bash复制cd xxl-job-admin
docker build -t opsxlab/xxl-job-admin:2.2.0 .
正确执行后,输出结果如下 :
代码语言:bash复制$ 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
4.2 验证镜像架构
代码语言:bash复制$ docker inspect opsxlab/xxl-job-admin:2.2.0 | grep "Architecture"
"Architecture": "arm64",
4.3 推送到自己的镜像仓库
代码语言:bash复制docker push opsxlab/xxl-job-admin:2.2.0
4.4 部署验证
部署验证需要搭建数据库,本文略,请自行完成测试。
以上,就是我今天分享的全部内容。下一期分享的内容还没想好,敬请期待开盲盒。
如果你喜欢本文,请分享、收藏、点赞、评论! 请持续关注 @运维有术,及时收看更多好文!
免责声明:
- 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
- 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境。由此引发的任何问题,作者概不负责!
版权声明
- 所有内容均属于原创,感谢阅读、收藏,转载请联系授权,未经授权不得转载。