最近有有个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 |
|
创建镜像: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 |
|
脚本指定了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 | jdbc.driver=com.mysql.jdbc.Driver |
vim /data/kettle/webapps/kettle-scheduler/WEB-INF/classes/resource/kettle.properties
1 | kettle.home=/usr/local/tomcat/webapps/kettle-scheduler |
其中,博客上有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 | version: '3' |
数据库配置是根据kettle的web项目要求配置的,其他是安装自己实践一步步配置出来的。
此时此刻,安心访问吧,默认用户名和密码都是admin: