制作xxl-job服务器的Docker镜像详解

本文将介绍如何制作xxl-job服务器的Docker镜像,利用容器技术可以大幅度简化xxl-job的部署和维护工作!

一、环境描述

1. 宿主机

  • CPU:双核
  • 内存:4 GB
  • 硬盘:120 GB
  • IP:192.168.190.128
  • 操作系统:CentOS 7.4-1708 x86_64 Minimal

2. Docker

3. xxl-job

  • 版本:v1.9.1

二、制作xxl-job镜像

1. 创建启动脚本

创建一个名为start.sh的脚本,用来在容器中启动xxl-job服务。在shell中运行以下命令:

cat > /root/Downloads/start.sh << "EOF"
#!/bin/sh

config_file="/usr/local/tomcat/webapps/xxl-job/WEB-INF/classes/xxl-job-admin.properties"

until [ $# -eq 0 ]
do
    case "$1" in
        --mysql-host)
            sed -i "3s/localhost/$2/g" $config_file
            shift 2;;
        --mysql-port)
            sed -i "3s/3306/$2/g" $config_file
            shift 2;;
        --mysql-user)
            sed -i "4s/root/$2/g" $config_file
            shift 2;;
        --mysql-password)
            sed -i "5s/root_pwd/$2/g" $config_file
            shift 2;;
        --mail-host)
            sed -i "8s/smtp.163.com/$2/g" $config_file
            shift 2;;
        --mail-port)
            sed -i "9s/25/$2/g" $config_file
            shift 2;;
        --mail-username)
            sed -i "10s/ovono802302@163.com/$2/g" $config_file
            shift 2;;
        --mail-password)
            sed -i "11s/asdfzxcv/$2/g" $config_file
            shift 2;;
        --mail-sendnick)
            sed -i "12s/《任务调度平台XXL-JOB》/$2/g" $config_file
            shift 2;;
        --login-username)
            sed -i "15s/admin/$2/g" $config_file
            shift 2;;
        --login-password)
            sed -i "16s/123456/$2/g" $config_file
            shift 2;;
        --access-token)
            sed -i "19s/xxl.job.accessToken=/xxl.job.accessToken=$2/g" $config_file
            shift 2;;
        *) echo " unknow prop $1";shift;;
    esac
done

echo "===================================="
cat $config_file
echo "===================================="

/usr/local/tomcat/bin/jsvc -stop org.apache.catalina.startup.Bootstrap

/usr/local/tomcat/bin/jsvc -nodetach -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -outfile /usr/local/tomcat/logs/catalina.out -errfile /usr/local/tomcat/logs/catalina.err -Dcatalina.home=/usr/local/tomcat -Dcatalina.base=/usr/local/tomcat -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties org.apache.catalina.startup.Bootstrap
EOF

start.sh脚本可以接收以下参数:

  • --mysql-host
    MySQL服务器的主机名或IP地址,默认值为localhost。

  • --mysql-port
    MySQL服务器的端口号,默认值为3306。

  • --mysql-user
    MySQL服务器的登录用户名,默认值为root。

  • --mysql-password
    MySQL服务器的登录密码,默认值为root_pwd。

  • --mail-host
    邮件服务器的主机名或IP地址,默认值为smtp.163.com。

  • --mail-port
    邮件服务器的端口号,默认值为25。

  • --mail-username
    邮箱的用户名,默认值为ovono802302@163.com。

  • --mail-password
    邮箱的密码,默认值为asdfzxcv。

  • --mail-sendnick
    邮件的发送昵称,默认值为《任务调度平台XXL-JOB》。

  • --login-username
    xxl-job控制台的登录用户名,默认值为admin。

  • --login-password
    xxl-job控制台的登录密码,默认值为123456。

  • --access-token
    xxl-job服务器的访问令牌,具有相同令牌的客户端才能链接xxl-job服务器,默认值为空。

start.sh脚本的操作步骤如下所示:

  • 首先,接收参数,并且修改配置文件;
  • 再次,将修改完成的配置文件输出至控制台;
  • 然后,停止Tomcat服务;
  • 最后,启动Tomcat服务。

2. 创建Dockerfile文件

在shell中运行以下命令:

cat > /root/Downloads/Dockerfile << "EOF"
# 使用自建的CentOS 6.9基础镜像
FROM registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos:6.9

# 镜像维护者
MAINTAINER ghoulich@aliyun.com

# 安装依赖包
RUN rpm --rebuilddb && yum install -y epel-release
RUN rpm --rebuilddb && yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel gcc autoconf wget tar unzip

# 下载安装Tomcat
RUN wget http://mirrors.advancedhosters.com/apache/tomcat/tomcat-9/v9.0.7/bin/apache-tomcat-9.0.7.tar.gz
RUN tar xvzf apache-tomcat-9.0.7.tar.gz
RUN rm -rf apache-tomcat-9.0.7.tar.gz
RUN mv apache-tomcat-9.0.7 /usr/local/tomcat

# 配置环境变量
ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-3.b14.el6_9.x86_64
ENV CATALINA_HOME /usr/local/tomcat

# 编译安装jsvc
RUN cd /usr/local/tomcat/bin && tar xvfz commons-daemon-native.tar.gz
RUN cd /usr/local/tomcat/bin/commons-daemon-1.1.0-native-src/unix/ && ./configure && make
RUN cp /usr/local/tomcat/bin/commons-daemon-1.1.0-native-src/unix/jsvc /usr/local/tomcat/bin/

## 安装xxl-job服务器
COPY xxl-job-admin-1.9.2-SNAPSHOT.war /
COPY start.sh /
RUN unzip -oq xxl-job-admin-1.9.2-SNAPSHOT.war -d xxl-job && mv xxl-job /usr/local/tomcat/webapps/ && rm -rf xxl-job-admin-1.9.2-SNAPSHOT.war

# 清理系统
RUN yum clean all

# 开放端口
EXPOSE 8080

# 挂载配置和日志目录
VOLUME ["/usr/local/tomcat/conf", "/usr/local/tomcat/logs"]

# 自动启动Tomcat
ENTRYPOINT ["/bin/bash","start.sh"]
EOF

注意,Dockerfile中的xxl-job-admin-1.9.2-SNAPSHOT.war文件可以参考《如何编译安装xxl-job服务器》编译得到,将这个文件存放在Dockerfile的相同目录之中即可。

Dockerfile文件有两点需要注意:

  • 公开8080端口,这是Tomcat的默认服务端口。
  • 创建配置和日志目录的挂载点,这样便可以通过宿主机直接编辑和查看Tomcat容器的配置和日志,即使删除容器,这些数据也不会丢失。

3. 制作镜像

在shell中运行以下命令,制作xxl-job的镜像:

cd /root/Downloads
docker build -t xxl-job:latest .

三、上传镜像

1. 登录阿里云镜像库

在shell中运行以下命令:

docker login --username=ghoulich@aliyun.com registry.cn-hangzhou.aliyuncs.com

请根据实际情况,使用真实的用户名和密码。

2. 创建镜像标签

在shell中运行以下命令:

docker tag xxl-job:latest registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos-6.9-xxl-job:1.9.1

3. 推送镜像

在shell中运行以下命令:

docker push registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos-6.9-xxl-job:1.9.1

四、使用方法

通过以下命令可以启动xxl-job容器:

docker run --detach \
           --name xxl-job \
           --hostname xxl-job \
           --volume /usr/local/xxl-job/conf:/usr/local/tomcat/conf \
           --volume /usr/local/xxl-job/logs:/usr/local/tomcat/logs \
           --expose 8080 \
           registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos-6.9-xxl-job:1.9.1 \
           --mysql-host 192.168.1.3 \
           --mysql-port 3306 \
           --mysql-user root \
           --mysql-password 123.Org$%^ \
           --mail-username xxxx@163.com \
           --mail-password password

数据库、邮件等相关参数,请根据实际情况进行设置!