使用Dockerfile部署xxljob
1. 背景
我们在使用定时任务调度时,通常会使用xxljob 容器化部署xxljob,通常使用 docker pull xuxueli/xxl-job-admin:2.4.0 拉取镜像并启动容器。这种方式对于x86架构服务器来说,没有任何问题。但是在arm架构的服务器上,运行容器会报错架构不匹配。
The requested image's platform ( linux/amd64) does not match the detected host platform ( linux/arm64/v8) and no specific platform was requested
由于在arm架构无法启动容器,因此,我们采用Dockerfile运行jar包的方式创建容器,使用这种方式,可以规避架构导致的容器运行失败的问题。
2. 前提条件:
已安装docker及docker-compose 已存在 jdk 镜像,我使用的是openjdk 17
3. 拉取xxljob源码,打包编译
git 项目地址 https://github.com/xuxueli/xxl-job 拉取代码 导入数据 在项目的 doc/db 目录下有一个sql文件,导入自己的数据库中 idea打开项目,使用maven 拉取依赖 修改xxl-job-admin工程的 application.properties配置文件,将数据库的配置改为自己的连接信息 运行xxl-job-admin工程,查看是否正常启动 启动成功后访问 http://localhost:8080/xxl-job-admin 如果能正常访问,说明环境没有问题,此时可以将xxl-job-admin打包成jar包
4. 部署xxljob
将 xxl-job-admin.jar 上传到服务器指定目录,我放在了 /data/xxl-job 目录 在同级目录创建 logback-spring.xml 用于配置日志
vim logback-spring.xml
< ?xml version = "1.0" encoding = "UTF-8" ?>
< configuration debug = "false" > < ! --定义日志文件的存储地址 --> < property name = "LOG_HOME" value = "/data/logs/xxl-job/" /> < ! --< property name = "COLOR_PATTERN" value = "%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t |Caller.{1}0|\r \n ', ''})- %gray(%msg%xEx%n)" /> --> < ! -- 控制台输出 --> < appender name = "STDOUT" class = "ch.qos.logback.core.ConsoleAppender" > < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" > < ! --格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符< pattern> %d{ yyyy-MM-dd HH:mm:ss.SSS} [ %thread] %-5level %logger{ 50 } :%L - %msg%n< /pattern> --> < pattern> %d{ yyyy-MM-dd HH:mm:ss.SSS} [ %thread] %highlight( %-5level) %cyan( %logger{ 50 } :%L) - %msg%n< /pattern> < /encoder> < /appender> < ! -- 按照每天生成日志文件 --> < appender name = "FILE" class = "ch.qos.logback.core.rolling.RollingFileAppender" > < rollingPolicy class = "ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy" > < ! --日志文件输出的文件名 --> < FileNamePattern> ${LOG_HOME} /xxl-job-%d{ yyyy-MM-dd} .%i.log< /FileNamePattern> < ! --日志文件保留天数 --> < MaxHistory> 3 0 < /MaxHistory> < maxFileSize> 10MB< /maxFileSize> < /rollingPolicy> < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" > < ! --格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --> < pattern> %d{ yyyy-MM-dd HH:mm:ss.SSS} [ %thread] %-5level %logger{ 50 } :%L - %msg%n< /pattern> < /encoder> < /appender> < ! --myibatis log configure --> < logger name = "com.apache.ibatis" level = "TRACE" /> < logger name = "java.sql.Connection" level = "DEBUG" /> < logger name = "java.sql.Statement" level = "DEBUG" /> < logger name = "java.sql.PreparedStatement" level = "DEBUG" /> < ! -- 日志输出级别 --> < root level = "INFO" > < appender-ref ref = "STDOUT" /> < appender-ref ref = "FILE" /> < /root> < /configuration>
在同级目录创建 Dockerfile 文件
vim Dockerfile
FROM openjdk:17 ENV TZ = Asia/ShanghaiADD xxl-job-admin.jar /data/xxl-job/xxl-job-admin.jar
EXPOSE 8080 CMD java ${JAVA_OPTS} -Dlogging.config = /data/xxl-job/logback-spring.xml -jar /data/xxl-job/xxl-job-admin.jar
创建 docker-compose-xxljob.yaml
vim docker-compose-xxljob.yaml
version : '3'
services : dsp-xxl-job : restart : alwaysbuild : context : /data/xxl- jobdockerfile : Dockerfilecontainer_name : xxl- jobimage : xxl- jobhostname : xxl- jobnetwork_mode : hostprivileged : true environment : TZ : Asia/ShanghaiSPRING_DATASOURCE_URL : jdbc: mysql: //xxx: 3306/xxl- job? Unicode=true&characterEncoding=UTF- 8 SPRING_DATASOURCE_USERNAME : rootSPRING_DATASOURCE_PASSWORD : 123456 ports : - 8080: 8080 volumes : - '/etc/localtime:/etc/localtime:ro' - '/data/xxl-job:/data/xxl-job:ro' - '/data/logs/xxl-job:/data/logs/xxl-job:rw'
启动容器
docker-compose -f docker-compose-xxljob.yaml up -d
启动成功后访问 http://服务器IP地址:8080/xxl-job-admin