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

这篇具有很好参考价值的文章主要介绍了基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

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

基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句),docker,数据库,容器
可以看到,它启动后会执行/docker-entrypoint-initdb.d/init.sql
基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句),docker,数据库,容器
最后msyql启动成功!!

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

2、连接mysql

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

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

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

3、在xxl-job-admin查看

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

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

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

四、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。
基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句),docker,数据库,容器文章来源地址https://www.toymoban.com/news/detail-670815.html

到了这里,关于基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu安装mysql5.7(适用于大多数ubuntu版本)

    前言:网上mysql的安装方式参差不齐,有的装了缺少配置文件,有的装了少库少表 所以现在出一个完整的mysql安装方案 装完没有密码,需要自己进去设置密码 装完有默认密码,需要查看并进去在自己修改 安装的时候输入密码,安装完成后直接使用 本文使用的正是第三种 my

    2024年02月16日
    浏览(33)
  • docker基于已有容器和通过Dockerfile进行制作镜像配置介绍

    目录 一.制作镜像的两种方式 1.在已有容器中更新并提交这个镜像 2.使用Dockerfile来制作 二.基于容器制作镜像 1.格式 (1)主要格式 (2)可选参数 2.案例 基于容器创建镜像设置标签并进行验证是否可用 (1)运行容器并写入验证内容(改变容器存储层内容) (2)另起终端制

    2024年02月11日
    浏览(32)
  • Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据

    制作一个 MySQL Docker 镜像并初始化数据库信息 win 11 Docker-Desktop 4.14.0 (91374) 启动一个MySQL容器很容易。如何初始化数据呢? 大概我们会尝试很多操作,比如百度常见到 使用 CMD 命令调用shell脚本,通过shell脚本处理初始化数据等等,经过实践,这些都不太方便。 其实,MySQL 官方提

    2024年01月18日
    浏览(34)
  • 基于Linux Alpine 制作 Java 8、11 Docker 镜像并支持中文

    Linux Alpine 1、关于linux alpine 楼主就不多介绍了,在容器化背景下, alpine 非常适合做容器基础镜像 。 2、有兴趣的同学可以转至官网查看 https://www.alpinelinux.org 制作Java镜像 1、楼主这里展示了基于 JDK1.8 和 JDK 11 的镜像制作方式 , 如下为 Dockerfile 文件 2、楼主这里增加了 glibc

    2024年02月09日
    浏览(32)
  • 【docker使用Jar自定义镜像:基于windows】

    不支持大写,因此改成: 我错误的原因,dockerfile中“ /docker-demo.jar ”忘了改成:“ study_dockerfile-1.0.0.jar ”,修改之后: ##启动镜像 将Dockerfile中改成8082: 无法访问,可见是不可以的。 添加配置文件 config/application.yaml 到 jar 包路径下,在配置文件中重新定义端口 参考文章:

    2024年02月06日
    浏览(25)
  • 【超全面】Docker使用:基本安装 + 常用命令 + 安装mysql、redis、clickhouse + 使用数据卷安装 + 制作镜像

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似

    2024年02月01日
    浏览(51)
  • docker制作m3u8web播放器镜像基于nginx-alpine镜像

    ZY Player Web项目:https://github.com/Hunlongyu/ZY-Player-Web 这是一个开源的m3u8 web播放器。我们基于这个项目进行打包 打包使用的Dockerfile 打包和运行

    2024年01月19日
    浏览(35)
  • 【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)

    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!  公众号原文链接:MySQL 源码构建 Docker 镜像(基于 ARM 64 架构) 背景介绍 近期,笔者正推进公司 MySQL 适配 ARM 64 架构工作,由于一直使用 Docke

    2024年04月15日
    浏览(37)
  • Docker运行MySQL5.7

    步骤如下: 1.获取镜像: 2.创建挂载目录: 3.先启动docker把配置文件拷贝出来: 这里需要另外起一个终端,来拷贝文件: 4.启动docker 参数说明: (1)-d:后台启动 (2)-p:端口映射 (3)-v:目录挂载,一共挂载了日志、数据文件、配置三种文件。 (4)--name:容器名字 (

    2024年02月15日
    浏览(29)
  • docker 安装 MySQL5.7

    1、拉取镜像 2、创建容器 3、/var/docker/mysql/conf 目录新建 my.cnf 通过容器卷同步给mysql容器实例 写入内容: 进入容器实例  进入 mysql   查看MySQL字符集

    2024年02月10日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包