本文将介绍如何制作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
- 版本:1.12.6
- 安装方式:参考《如何通过yum安装Docker和Docker-Compose》
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
数据库、邮件等相关参数,请根据实际情况进行设置!