当前位置: 首页 > news >正文

Dockerfile部署xxljob

使用Dockerfile部署xxljob

1. 背景

  1. 我们在使用定时任务调度时,通常会使用xxljob
  2. 容器化部署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
  1. 由于在arm架构无法启动容器,因此,我们采用Dockerfile运行jar包的方式创建容器,使用这种方式,可以规避架构导致的容器运行失败的问题。

2. 前提条件:

  1. 已安装docker及docker-compose
  2. 已存在 jdk 镜像,我使用的是openjdk 17
    在这里插入图片描述

3. 拉取xxljob源码,打包编译

  1. git 项目地址
    https://github.com/xuxueli/xxl-job
    拉取代码
  2. 导入数据
    在项目的 doc/db 目录下有一个sql文件,导入自己的数据库中
  3. idea打开项目,使用maven 拉取依赖
  4. 修改xxl-job-admin工程的 application.properties配置文件,将数据库的配置改为自己的连接信息
  5. 运行xxl-job-admin工程,查看是否正常启动
  6. 启动成功后访问 http://localhost:8080/xxl-job-admin
  7. 如果能正常访问,说明环境没有问题,此时可以将xxl-job-admin打包成jar包

4. 部署xxljob

  1. 将 xxl-job-admin.jar 上传到服务器指定目录,我放在了 /data/xxl-job 目录
  2. 在同级目录创建 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>30</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>
  1. 在同级目录创建 Dockerfile 文件
vim Dockerfile
FROM openjdk:17 # 引入jdk,对应自己的版本ENV TZ=Asia/ShanghaiADD xxl-job-admin.jar /data/xxl-job/xxl-job-admin.jar
EXPOSE 8080CMD java ${JAVA_OPTS} -Dlogging.config=/data/xxl-job/logback-spring.xml -jar /data/xxl-job/xxl-job-admin.jar
  1. 创建 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: trueenvironment:TZ:  Asia/ShanghaiSPRING_DATASOURCE_URL: jdbc:mysql://xxx:3306/xxl-job?Unicode=true&characterEncoding=UTF-8SPRING_DATASOURCE_USERNAME: rootSPRING_DATASOURCE_PASSWORD: 123456ports:- 8080:8080volumes:- '/etc/localtime:/etc/localtime:ro'- '/data/xxl-job:/data/xxl-job:ro'- '/data/logs/xxl-job:/data/logs/xxl-job:rw'
  1. 启动容器
docker-compose -f docker-compose-xxljob.yaml up -d
  1. 启动成功后访问 http://服务器IP地址:8080/xxl-job-admin

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • kotlin——设计模式之责任链模式
  • Spring Boot 学习之路 -- 处理 HTTP 请求
  • 20240924软考架构-------软考191-195答案解析
  • 英飞凌TC3xx -- Bootstrap Loader分析
  • 基于FPGA+GPU异构平台的遥感图像切片解决方案
  • 汽车端到端自动驾驶系统的关键技术与发展趋势
  • EasyGBD国标GB28181设备端,支持GB28181-2016、GB28181-2022
  • 基于C#+SQL Server2008实现(CS界面)学生宿舍管理系统
  • 【Docker】深入理解 Docker Compose 文件:构建和管理多容器应用的指南
  • 基于OpenCV的单目测距
  • uniapp map使用非CSS 定位和固定高度来设置,避免拉伸父容器的高度
  • 《AI办公类工具表格处理系列之一——办公小浣熊》
  • java 洛谷题单【算法1-7】搜索
  • 第一章 HTTP
  • frp内网穿透部署
  • 深入了解以太坊
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • HTTP那些事
  • JDK 6和JDK 7中的substring()方法
  • Python语法速览与机器学习开发环境搭建
  • text-decoration与color属性
  • 给新手的新浪微博 SDK 集成教程【一】
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 模型微调
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 三分钟教你同步 Visual Studio Code 设置
  • 数组大概知多少
  • 微服务框架lagom
  • #pragma预处理命令
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (06)金属布线——为半导体注入生命的连接
  • (2.2w字)前端单元测试之Jest详解篇
  • (c语言)strcpy函数用法
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)丶RabbitMQ的六大核心
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (算法)大数的进制转换
  • (一)认识微服务
  • **PHP二维数组遍历时同时赋值
  • *Django中的Ajax 纯js的书写样式1
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET序列化 serializable,反序列化
  • 。。。。。
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • ??在JSP中,java和JavaScript如何交互?
  • @font-face 用字体画图标
  • @ResponseBody
  • [ IDE ] SEGGER Embedded Studio for RISC-V
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会