使用docker搭建kettle调度监控平台项目

最近有有个kettle的项目需求,要求能快速转移和部署,那只能使用docker来做了。

准备和测试

kettle是一个开源的项目,已经有人把它打包成web项目,项目地址为:https://gitcode.net/mirrors/zhaxiaodong9860/kettle-scheduler/-/tree/master
项目创建人使用的是windows,需要把项目转移到Linux上使用。

环境

操作系统:CentOS 7.9 core
docker版本:docker-ce-17.12.1
docker-compose版本: 1.29.2
基础镜像:alpine:latest
jre版本:1.8
mysql版本:5.7
tomcat版本:8.5

安装docker

其实docker版本没什么要求,直接yun install也可以,不过因为先装了docker私有镜像harbor,所以就要更新docker版本:
可以参考harbor的需求环境:https://goharbor.io/docs/2.4.0/install-config/installation-prereqs/
先删除旧版本:
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
添加docker安装源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装最新版本:
yum install docker-ce docker-ce-cli containerd.io
或者指定版本:
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
安装docker-compose:
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

构造JRE基础镜像

这一步很关键,所有配置都再基础镜像上修改。
下载alpine镜像:
docker pull alpine
通过dockerfile构建镜像:
cd /opt/
mkdir -p alpine_jre && cd alpine_jre && touch Dockerfile
vim Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 作者信息
MAINTAINER JRE Docker Maintainers "yanpengshan"

# 修改源
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \
echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories

# 安装需要的软件
RUN apk update && \
apk add --no-cache ca-certificates && \
apk add --no-cache curl bash tree tzdata && \
cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 定义环境变量
ENV PATH /usr/local/bin:${PATH}

# 安装JRE
RUN apk add --no-cache openjdk8-jre-base && \
rm -rf /var/cache/apk/*

RUN { \
echo '#!/bin/sh'; \
echo 'set -e'; \
echo; \
echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"'; \
} > /usr/local/bin/docker-java-home \
&& chmod +x /usr/local/bin/docker-java-home

ENV JAVA_HOME /usr/lib/jvm/default-jvm
ENV PATH ${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin
RUN set -x \
\
&& apk add --no-cache openjdk8-jre

创建镜像:
docker build -t alpine_jre .

此时创建名字为alpine_jre的镜像成功。

构造tomcat基础镜像

在alpine_jre:latest的镜像基础下再创建tomcat镜像。
此时没有用dockerfile构建,因为涉及太多参数,编写dockerfile比较麻烦,所以就直接进入alpine_jre的镜像进行手动修改。
首先到清华大学镜像站下载tomcat二进制包:
https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.78/bin/apache-tomcat-8.5.78.tar.gz
启动alpine_jre镜像:
docker run -d alpine_jre:latest /bin/sh
使用docker ps -a查看镜像是否启动成功以及其容器ID
拷贝tomcat包到容器的/opt目录:
docker cp apache-tomcat-8.5.78.tar.gz 容器ID:/opt/
进入容器环境:
docker exec -it 容器ID /bin/sh
进入/opt目录解压tomcat:
tar zxf apache-tomcat-8.5.78.tar.gz
移动tomcat文件到/usr/local/tomcat/目录下:
mv apache-tomcat-8.5.78/ /usr/local/tomcat/
创建运行脚本:
vim run.sh

1
2
3
4
#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/default-jvm
export PATH=${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin:${PATH}
sh /usr/local/tomcat/bin/catalina.sh run

脚本指定了JAVA的路径以及TOMCAT的启动
保存退出后添加脚本执行权限:
chmod +x run.sh

完成后删除tomcat的安装包以创造一个干净的tomcat镜像。
删除完毕后退出镜像,此时可以保存容器为镜像:
docker commit 容器ID alpine_tomcat:v1

测试运行镜像:
docker run -d -p 8888:8080 --name web alpine_tomcat:v1 /opt/run.sh
此时访问主机IP:8888,正常的话就会显示tomcat的欢迎页面。

拷贝tomcat配置文件,web源码包及修改配置

先不要关闭容器,在宿主主机创建docker的数据目录进行映射,这样数据就可以持久化:
我的docker数据存放在/data目录下,先创建数据库和kettle的数据目录:
mkdir -p {/data/mysql/conf,/data/mysql/data,/data/kettle/conf,/data/kettle/webapps,/data/kettle/logs}
复制tomcat配置文件到/data/kettle/conf目录下:
docker cp 容器ID:/usr/local/tomcat/conf/ /data/kettle/conf
下载WEB包到/data/kettle/webapps:
https://blog.csdn.net/zhaxiaodong/article/details/84107102
博主上传到百度云,用的是WAR包,只要tomcat的server.xml中host字段unpackWARs=”true”,就说明放到目录下会自动解压
修改server.xml:
在最后host字段增加:

1
<Context docBase="kettle-scheduler" path=""  reloadable="true" debug="0" privileged="true" ></Context>

安装博客要求修改db.properties和kettle.properties文件:
vim /data/kettle/webapps/kettle-scheduler/WEB-INF/classes/resource/db.properties

1
2
3
4
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.1.205:13306/kettle?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
jdbc.username=root
jdbc.password=123456

vim /data/kettle/webapps/kettle-scheduler/WEB-INF/classes/resource/kettle.properties

1
2
3
4
5
6
kettle.home=/usr/local/tomcat/webapps/kettle-scheduler
kettle.plugin=/usr/local/tomcat/bin/plugins
kettle.script=Html/js/libs/url
kettle.loglevel=detail
kettle.log.file.path=/usr/local/tomcat/logs
kettle.file.repository=/usr/local/tomcat/test

其中,博客上有kettle8.0工具下载地址:[点击下载]https://sourceforge.net/projects/pentaho/files/Pentaho%208.0/client-tools/pdi-ce-8.0.0.0-28.zip/download?use_mirror=nchc
就是说需要用到大数据组件的:将下载下来的工具的data-integration目录下的simple-jndi、system和plugins文件夹拷贝到apache-tomcat-9.0.12\bin目录下
不需要用到大数据组件的:将kettle-scheduler的web目录下kettle-lifecycle-listeners.xml和kettle-registry-extensions.xml删除。

下载数据库镜像及配置docker-compose

下载mysql 5.7镜像:
docker pull mysql:5.7
运行mysql镜像:
docker run -d -p 13306:3306 -v /data/mysql/data/:/var/lib/mysql mysql:5.7 -e MYSQL_ROOT_PASSWORD: '123456'
拷贝sql文件到目录下:
docker cp kettle-scheduler.sql 容器ID:/opt
进入容器:
docker exec -it 容器ID
进入/opt目录然后运行:
mysql -u root -p 123456
创建数据库:
create database kettle
切换数据库:
use kettle
导入数据库
source kettle-scheduler.sql
此时导入成功,退出容器,使用nvaicat软件测试连接数据库:

创建docker-compose.yml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: '3'
services:
kettle-mysql:
container_name: kettle-mysql
restart: always
image: mysql:5.7
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_DATABASE: kettle
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--lower_case_table_names=1
ports:
- 13306:3306
volumes:
- /data/mysql/conf:/etc/mysql/conf.d
- /data/mysql/data/:/var/lib/mysql
kettle-pack:
container_name: kettle
restart: always
depends_on:
- kettle-mysql
image: alpine_tomcat:v2
ports:
- '8888:8080'
volumes:
- /data/kettle/webapps:/usr/local/tomcat/webapps
- /data/kettle/conf/:/usr/local/tomcat/conf/
- /data/kettle/logs/:/usr/local/tomcat/logs/
command: /opt/run.sh

数据库配置是根据kettle的web项目要求配置的,其他是安装自己实践一步步配置出来的。

此时此刻,安心访问吧,默认用户名和密码都是admin:

分享到