可以查考对应的官方文档,在github上,官方文档
我这里用的是2.2.0(目前最新的) 切记,你用的什么版本的源码或者镜像构建的,那么后面项目中也需要引入对应的xxljob的jar包版本,不然 可能会出现各种奇怪的问题,而且根据我个人的操作来感官,最好用最新版本的,说实话,在使用这个docker 部署时,我使用了2.0.1以及2.1.0两个版本,但是都有问题,可能是我的技术问题,但是最后使用目前最新的2.2.0后就可以成功!
我这里拉取的是目前最新的版本2.2.0
docker pull xuxueli/xxl-job-admin:2.2.0
构建镜像的命令如下:
/**
* 如需自定义 mysql 等配置,可通过 "-e PARAMS" 指定,参数格式 PARAMS="--key=value --key2=value2" ;
* 配置项参考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
* 如需自定义 JVM内存参数 等配置,可通过 "-e JAVA_OPTS" 指定,参数格式 JAVA_OPTS="-Xmx512m" ;
* 其它更多的请参考官方文档或者百度,哈哈
*/
docker run -d \
-e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.108.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC \
--spring.datasource.username=root \
--spring.datasource.password=123456 \
--spring.datasource.driver-class-name=com.mysql.jdbc.Driver" \
-p 9056:8080 \
-v /home/gxm/docker:/data/applogs \
--name my-xxl-job-admin-2.2.0 \
-d xuxueli/xxl-job-admin:2.2.0
一定要指定日志的挂载目录 -v /tmp:/data/applogs 不然 后面出现问题,哈哈,小伙子就有你受的了,就算叫天天不应,叫地地不灵。
这里要注意,创建xxljob的镜像的时候,需要连接数据库,它需要连接数据库xxl_job,这个数据库脚本,也一定要选着对应的版本源码下的sql脚本
这里其实 是可以指定将PARAMS放到文件里面的,然后构建的时候指定这个文件就好,由于时间有限,em…这个后面大家可以自己去找下相关文档
这里的数据库地址我写的是win上的ip(192.168.108.1),因为我是在win上搭建的centos(192.168.108.3),
为什么我想着要连接win(192.168.108.1)上的数据库,而不是linux(192.168.108.3)上搭建的数据库,其原因很简单,因为后面发镜像的时候肯定连接的都是其它ip的
但是问题来了,数据库是外部的,构建好镜像后进入容器内部,看下能否练级外部的Ip,所以首先你需要进入容器内部,命令如下:
// 进入容器中
sudo docker exec -it f15f8e50a341 /bin/bash
那一串的字符串就是对应的容器id
请参考 docker容器中安装vim 、telnet、ifconfig命令
注意一定要(apt-get update), 如果出现什么问题就在容器内部执行这个命令,注意这些命令都是在容器内部执行的,并且 安装完成也只是在当前你安装的这个容器内部可以使用,其它没有安装的好像还是不行。难顶偶…
此时,在容器内部可以使用,注意需要将linux(192.168.108.3)的防火墙以及win(192.168.108.1)的防火墙关掉偶
telnet 192.168.108.1 3306
看看是否能够连接win上的mysql ,结果如下,有返回值,说明就可以了!
如何期间出现了什么意外的问题,不要慌,来回使用上面的命令,不行就退出容器内部,再执行处理
再次提醒注意:关闭linux(192.168.108.3的防火墙),当然win(192.168.108.1)的防火强也需要关掉
在win上访问linux上搭建的 http://192.168.108.3:9056/xxl-job-admin,一点击登陆,你就会发现
卧槽。如下图2.2.2
数据库怎么连接不上了,前面不是已经在容器内部telnet通了吗??????why,此时,就显得挂载日志的重要性了,我们进入刚刚挂载xxljob日志的目录,如图
我们偷偷瞄一眼,卧槽原来是win上的root账户没有给远程登陆的权限,报错如图
至于怎么授权mysql上的用户给远程机器登陆,往这里就不再多啰嗦了,相信大家也都知道。
解决完上面的问题,我们就可以登陆访问了 账号admin ,密码 123456(对于这个账号密码其实都可以在构建镜像的时候指定参数的,或者放到文件中,构建时指定,我这里就不再多说了,前面说过了),http://192.168.108.3:9056/xxl-job-admin。信心满满,打开浏览器,卧槽无情,莫名其妙的跑不起来。em…当时心里,问题不大。
自己一直访问9056,没有数据,curl也被拒绝。
em…,怀疑人生了,最后一看,我去,原来镜像没有跑起来,虽然,我们一直看xxljob的日志没有报错,但是我们使用docker ps ,一直刷新就能看到,卧槽,my-xxljob-admin2.2.0 没有了。
我们再使用docker命令查看最近的日志,为什么要看docker的日志,因为我们的镜像启动日志没有报错。
docker logs --since 2m 15235a1a4858
查看刚刚这个镜像的docker 最近 2分钟的 日志(最后面的一串字符串就是镜像id),em…一看,被终止了
我突然想到之前发布华为云镜像的时候,也是,测试没有问题,一到正式,日志也没有错,就是跑不起来,最后发现,在华为云发布镜像的时候,我们这边设置的启动内存大小,难道是这个问题?算了吧,别装了,怎么可能现在这个问题明显不是(以上是内心独白,哈哈哈哈)
然后我仔细看了下错误日志,发现em…,为什么 2.1.0是1.7的jdk,我们centos7上装的是1.8的,虽然好像没有问题,跟linux的jdk版本好像没有关系把,我们使用docker,但是现在又找不到好的解决方案,em。。。。。去官网一看2.2.0出来了,而且表明必须1.8+,嗯,换成2.2.0,(不要忘记重新下载2.2.0的源码,执行对应版本sql语句)
以防万一,最好重新生成对应版本的数据库,然后我们重新拉取下2.2.0的镜像,然后你会发现会报一些什么serverTimezone不识别的问题,嗯,你放心,按照我后面这种创建是绝对没有问题的。哈哈,报那个错误是因为好像没有设置时区,或者时区设置的不对,可以参考 使用JDBC连接MySql时出现:The server time zone value ‘�й���ʱ��’
然后 我们也可以查看日志,发现没有报错,然后我们在linux上curl 127.0.0.1:9056 嗯nice,有返回值了,
可以了,在win上登陆,我们熟悉的界面回来了,使用账号:admin,密码:123456,登陆成功!nice
此时内心,嗯真的不容易见到这个页面!
接下来就是建立一个小demo ,注册然后使用,(em…请注意2.2.0好像变化很大,使用的时候要根据官方文档偶!!!冲冲冲!!!)
这步就很简单了, 此时,我们建立一个简单的项目测试是否可以,注意项目引入的依赖,需要跟你那个拉取的镜像版本保持一致,我这里是2.2.0 如图
2.2.0中的任务的实现方法发生了改变,大家可以看官网文档,单其实也没有改多少,大概就是下面这样
好了至于直接启动什么测试的,我就不弄了,em…以上就是我走过的坑,在此记录下来,方便自己以后的查看,也希望看到这篇博客的盆友一个小小的帮助