基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句)

news2024/11/15 13:58:38

一、背景

xxl-job-admin依赖mysql数据库,且需执行初始化脚本,包括ddl和dml语句。
具体的步骤总结如下:

  • 1、新建数据库xxl_job
  • 2、创建mysql表table
  • 3、执行dml语句,包括新建admin用户及密码,创建执行器和任务。

毫无疑问,人工每次去操作这些,不仅耗费人力和时间,还容易出错。

所以,本文试着基于mysql官方镜像,制作一个属于自己的数据库镜像。

使用xxl-job的版本是2.2.0,下文所做的脚本都是基于该版本。

二、制作自己的镜像

在制作docker镜像前,你需要准备好Dockerfile和init.sql

1、Dockerfile

# 使用官方 MySQL 5.7 镜像作为基础镜像
FROM mysql:5.7

# 设置环境变量,用于 MySQL 配置
ENV MYSQL_ROOT_PASSWORD=123456

# 将初始化 SQL 脚本文件复制到容器中
COPY init.sql /docker-entrypoint-initdb.d/

# 暴露 MySQL 默认端口
EXPOSE 3306

2、sql脚本(init.sql)

CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `xxl_job`;
 
 
SET NAMES utf8mb4;
 
 
CREATE TABLE `xxl_job_info` (
                                `id` int(11) NOT NULL AUTO_INCREMENT,
                                `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
                                `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON',
                                `job_desc` varchar(255) NOT NULL,
                                `add_time` datetime DEFAULT NULL,
                                `update_time` datetime DEFAULT NULL,
                                `author` varchar(64) DEFAULT NULL COMMENT '作者',
                                `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
                                `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',
                                `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
                                `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
                                `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
                                `executor_timeout` int(11) NOT NULL DEFAULT 0 COMMENT '任务执行超时时间,单位秒',
                                `executor_fail_retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '失败重试次数',
                                `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
                                `glue_source` mediumtext DEFAULT NULL COMMENT 'GLUE源代码',
                                `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
                                `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',
                                `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',
                                `trigger_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '调度状态:0-停止,1-运行',
                                `trigger_last_time` bigint(13) NOT NULL DEFAULT 0 COMMENT '上次调度时间',
                                `trigger_next_time` bigint(13) NOT NULL DEFAULT 0 COMMENT '下次调度时间',
                                PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 
CREATE TABLE `xxl_job_log` (
                               `id` bigint(20) NOT NULL AUTO_INCREMENT,
                               `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
                               `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
                               `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
                               `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
                               `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
                               `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',
                               `executor_fail_retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '失败重试次数',
                               `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
                               `trigger_code` int(11) NOT NULL COMMENT '调度-结果',
                               `trigger_msg` text DEFAULT NULL COMMENT '调度-日志',
                               `handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
                               `handle_code` int(11) NOT NULL COMMENT '执行-状态',
                               `handle_msg` text DEFAULT NULL COMMENT '执行-日志',
                               `alarm_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',
                               PRIMARY KEY (`id`),
                               KEY `I_trigger_time` (`trigger_time`),
                               KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 
CREATE TABLE `xxl_job_log_report` (
                                      `id` int(11) NOT NULL AUTO_INCREMENT,
                                      `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间',
                                      `running_count` int(11) NOT NULL DEFAULT 0 COMMENT '运行中-日志数量',
                                      `suc_count` int(11) NOT NULL DEFAULT 0 COMMENT '执行成功-日志数量',
                                      `fail_count` int(11) NOT NULL DEFAULT 0 COMMENT '执行失败-日志数量',
                                      PRIMARY KEY (`id`),
                                      UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 
CREATE TABLE `xxl_job_logglue` (
                                   `id` int(11) NOT NULL AUTO_INCREMENT,
                                   `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
                                   `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',
                                   `glue_source` mediumtext DEFAULT NULL COMMENT 'GLUE源代码',
                                   `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',
                                   `add_time` datetime DEFAULT NULL,
                                   `update_time` datetime DEFAULT NULL,
                                   PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 
CREATE TABLE `xxl_job_registry` (
                                    `id` int(11) NOT NULL AUTO_INCREMENT,
                                    `registry_group` varchar(50) NOT NULL,
                                    `registry_key` varchar(255) NOT NULL,
                                    `registry_value` varchar(255) NOT NULL,
                                    `update_time` datetime DEFAULT NULL,
                                    PRIMARY KEY (`id`),
                                    KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 
CREATE TABLE `xxl_job_group` (
                                 `id` int(11) NOT NULL AUTO_INCREMENT,
                                 `app_name` varchar(64) NOT NULL COMMENT '执行器AppName',
                                 `title` varchar(12) NOT NULL COMMENT '执行器名称',
                                 `address_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '执行器地址类型:0=自动注册、1=手动录入',
                                 `address_list` varchar(512) DEFAULT NULL COMMENT '执行器地址列表,多地址逗号分隔',
                                 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 
CREATE TABLE `xxl_job_user` (
                                `id` int(11) NOT NULL AUTO_INCREMENT,
                                `username` varchar(50) NOT NULL COMMENT '账号',
                                `password` varchar(50) NOT NULL COMMENT '密码',
                                `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',
                                `permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
                                PRIMARY KEY (`id`),
                                UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 
CREATE TABLE `xxl_job_lock` (
                                `lock_name` varchar(50) NOT NULL COMMENT '锁名称',
                                PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 
INSERT INTO `xxl_job_group` (`id`,`app_name`,`title`,`address_type`,`address_list`)
VALUES (1,'user-service','用户服务',0, NULL);
 
// 注意字段 alarm_email 赋空值,而非null
INSERT INTO `xxl_job_info` (`job_group`,`job_cron`,`job_desc`,`add_time`,`update_time`,`author`,`alarm_email`,`executor_route_strategy`,`executor_handler`,`executor_param`,`executor_block_strategy`,`executor_timeout`,`executor_fail_retry_count`,`glue_type`,`glue_source`,`glue_remark`,`glue_updatetime`,`child_jobid`,`trigger_status`,`trigger_last_time`,`trigger_next_time`)
VALUES (1,'0 0 1 * * ?','定时整理工作',now(),now(),'admin','','ROUND','autoRemoveEmptyRoom','','SERIAL_EXECUTION',0,0,'BEAN','','GLUE代码初始化','2022-08-08 11:01:23','',1,1692032400000,1692118800000);
 

// 注意字段 permission 赋空值,而非null
INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, '');
 
 
INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');

3、构建及推送镜像

docker build -t xxx/xx-job-mysql:2.2.0-20230824 .

docker tag xxx/xx-job-mysql:2.2.0-20230824 192.168.5.6:8086/xxx/xx-job-mysql:2.2.0-20230824

docker push 192.168.5.6:8086/xxx/xx-job-mysql:2.2.0-20230824

三、测试镜像

1、执行容器

docker run -it --name xx-job-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 xxx/xx-job-mysql:2.2.0-20230824

在这里插入图片描述
可以看到,它启动后会执行/docker-entrypoint-initdb.d/init.sql
在这里插入图片描述
最后msyql启动成功!!

在这里插入图片描述

2、连接mysql

连接地址是: mysql -h 192.168.828 -u root -p123456

在这里插入图片描述

在这里插入图片描述

3、在xxl-job-admin查看

  • 新增的用户admin
    在这里插入图片描述

  • 创建执行器
    在这里插入图片描述

  • 创建任务
    在这里插入图片描述

四、docker-compose部署

如果你是使用docker-compose部署,这里也贴出来:

version: '3'
services:
  mysql:
    image: 192.168.5.6:8086/xxx/xx-job-mysql:2.2.0-20230824
    container_name: mysql
    restart: always
    ports:
      - "3308:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/config:/etc/mysql/conf.d
      - /etc/localtime:/etc/localtime
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      TIME_ZONE: Asia/Shanghai

这里,我们做了volume持久化,其实对于xxl-job可以不用做data数据持久。但是你搭建一个数据库,可能不仅仅是适用于xxl-job。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue uniapp 同意验证码滑块验证

前言 &#xff08;vue-puzzle-vcode&#xff09; 发送验证码以及登录的时候会做验证&#xff0c;防止机刷等 效果图 一、安装依赖 npm install vue-puzzle-vcode --save二、使用步骤 1.html使用 <Vcode :show"isShow" success"onSuccess"/>2.j…

Abaqus建筑工程应用的10大特征

前后处理界面友好易用 • 界面支持中英文 • 建模和查看结果采用一致的操 作环境 • 模型树和结果树使操作更便捷 • 支持基于Python脚本的建模方式 有限元求解器性能卓越 • 单元类型全――超500种类型 单元适应各种工程对象 • 材料模型多――能够模拟金属、 混凝土、岩…

使用fastjson2的@JSONField注解解决日期格式记录

最近在做一个三方对接&#xff0c;对方的日期格式数据要求时间日期格式: yyyyMMddHHmmss或者 yyyyMMdd&#xff0c;我一下想起了fastjson2工具包&#xff0c;所以很愉快的解决了此问题。 依赖jar如下&#xff1a; <dependency><groupId>com.alibaba.fastjson2</…

全球Salesforce顾问薪资大揭秘!顾问如何升职加薪?

Salesforce顾问通过针对业务挑战提出、记录和分析需求&#xff0c;提供解决方案&#xff0c;从而帮助企业改善Salesforce的流程和效率。顾问是企业和Salesforce之间的桥梁。 Salesforce顾问的薪资一直是生态系统中的热门话题&#xff0c;备受求职者关注。本篇文章将分享提高顾…

OpenEuler华为欧拉系统安装

OpenEuler华为欧拉系统安装 一、OpenEuler简介1、OpenEuler概述2、OpenEuler特性 二、OpenEuler部署安装1、安装前配置2、安装引导3、选择语言4、安装信息摘要 三、欧拉系统安装图形化界面1、需要在超级管理员&#xff0c;在root权限下操作2、启动图形化界面 四、手动安装VMwar…

Vue3语法系统进阶 - 全面掌握Vue3特性

目录 01-ref属性在元素和组件上的分别使用02-利用nextTick监听DOM更新后的情况03-自定义指令与自定义全局属性及应用场景04-复用组件功能之Mixin混入05-插件的概念及插件的实现06-transition动画与过渡的实现07-动态组件与keep-alive组件缓存08-异步组件与Suspense一起使用09-跨…

合宙Air724UG LuatOS-Air LVGL API控件--曲线 (Arc)

曲线 (Arc) 曲线控件&#xff0c;也可以称为弧。因为 Arc 本身就是弧&#xff0c;弧形的意思。根据控件的样子也能推测出它的使用场景&#xff0c;一般用在加载器(就是等待界面转的圈圈)或者数值显示&#xff0c;数值调节这些场景。曲线控件分了两个部分&#xff0c;前景和背…

机器学习笔记之优化算法(十六)梯度下降法在强凸函数上的收敛性证明

机器学习笔记之优化算法——梯度下降法在强凸函数上的收敛性证明 引言回顾&#xff1a;凸函数与强凸函数梯度下降法&#xff1a;凸函数上的收敛性分析 关于白老爹定理的一些新的认识梯度下降法在强凸函数上的收敛性收敛性定理介绍结论分析证明过程 引言 本节将介绍&#xff1a…

Element table根据字段合并表格(可多字段合并),附带拖拽列动态合并

效果如图&#xff0c;姓名 数值1 字段进行自动合并 封装合并列js - tableMerge.js // 获取列合并的行数 // params // tableData: 表格数据 // mergeId: 合并的列的字段名 export const tagRowSpan (tableData, mergeId) >{const tagArr [];let pos 0;tableData.map((i…

CentOS KVM虚拟安装和开机启动

1. 配置系统 关闭SELinux setenforce 0持久化关闭配置 vi /etc/selinux/config2. 安装虚拟化软件 安装 KVM、QEMU等虚拟化软件。 yum install qemu-kvm qemu-img virt-manager libvirt virt-install virt-viewer 检查LVM模块是否已经加载 lsmod |grep kvm设置开机启动 s…

【C语言】扫雷游戏(可展开)——超细教学

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将运用数组来实现 扫雷游戏。 目录&#xff1a; &#x1f31f;思路框架测试游戏 &#x1f31f;测试部分函数实现&am…

SimSolid技术原理解析 衡祖仿真

面向超大规模结构的无网格分析软件Altair SimSolid&#xff0c;自从面世以来&#xff0c;受到广大工程师的关注。SimSolid 是面向设计师、工程师和分析师的颠覆性仿真技术&#xff0c;可在几分钟内对结构复杂的 CAD 装配体进行结构分析。它消除了传统结构仿真中非常耗时、非常专…

农业水价综合改革系统主要组成

一、系统概述 农业水价改革灌区信息化系统主要由感知采集层、网络传输层、系统应用层等部分组成。通过无线技术、感知层技术与新型应用的有效结合&#xff0c;可以用于各种业务的传送&#xff0c;充分满足灌区监测站间的物与物互联&#xff0c;农业生产的自动化和信息化相结合。…

计算机系统简介

计算机系统简介 计算机系统 硬件 计算机实体&#xff0c;如主机、外设软件 具有各类特殊功能的信息&#xff08;程序&#xff09;组成 软件 系统软件 用来管理整个计算机系统 &#xff08;语言处理程序、操作系统、服务性程序、数据库管理系统、网络软件&#xff09;应用…

Apple用户如何利用Twinmotion路径追踪器渲染

Twinmotion 是一款功能强大的实时可视化工具&#xff0c;允许设计人员为建筑设计、产品设计等创建高质量的渲染和交互体验。其当前最强大的渲染功能之一是路径追踪器&#xff0c;它通过精确的照明计算生成逼真的图像。 然而&#xff0c;许多 Apple 用户想知道如何利用 Twinmot…

生物医学翻译,选择专业翻译公司有何优势

我们知道&#xff0c;生物医学翻译是基于生物医学等相关行业的翻译服务&#xff0c;具有较强的专业性和复杂性&#xff0c;为了确保生物医学翻译的质量&#xff0c;务必选择专业的翻译公司。那么&#xff0c;专业翻译公司有何优势&#xff0c;北京生物医学翻译哪家好&#xff1…

【python】Leetcode(primer-set)

文章目录 78. 子集&#xff08;集合的所有子集&#xff09;90. 子集 II&#xff08;集合的所有子集&#xff09; 更多 leetcode 题解可参考&#xff1a;【Programming】 78. 子集&#xff08;集合的所有子集&#xff09; 给定一组不含重复元素的整数数组 nums&#xff0c;返回…

【python】Leetcode(primer-binary)

文章目录 504. 七进制数&#xff08;进制转换&#xff09;461. 汉明距离&#xff08;进制转换 / 异或&#xff09;136. 只出现一次的数字&#xff08;位运算&#xff09; 更多 leetcode 题解可参考&#xff1a;【Programming】 504. 七进制数&#xff08;进制转换&#xff09; …

Python学习 -- 类的继承

类继承是面向对象编程中的重要概念&#xff0c;它允许我们创建一个新的类&#xff0c;通过继承已有的类的属性和方法&#xff0c;从而实现代码的重用和扩展。Python作为一门面向对象的编程语言&#xff0c;提供了强大而灵活的类继承机制。本篇博客将深入探讨Python中类继承的概…

全国规模最大!算力并网行动开启

8月19日&#xff0c;在2023中国算力大会主论坛上&#xff0c;中国移动携手多个超算中心、智算中心&#xff0c;以及云服务商&#xff0c;共同发起全国规模最大的“百川”算力并网行动&#xff0c;打造算力类型最全、规模最大、覆盖最广的“百川”算力并网平台&#xff0c;加快推…