概述
datax
和datax-web
从一台机器迁移到另一台时,要重新搭建一套运行环境,比较麻烦;打包成docker
镜像后迁移就方便多了;
因为我的mysql
版本是8
,需要在datax
的read
和write
中手动添加8
的jdbc
驱动
所以我先各自下载好了datax
和datax-web
,在宿主机上试了一波ok
后;
然后手动打包成了docker
镜像,方便后续迁移
我的环境
ubuntu22.04
jdk:1.8+
python:3.10.12
maven:3.8.8
docker:26.00
docker-compose:2.24.7
datax-web:2.1.2
准备工作
datax
https://github.com/alibaba/DataX/tree/datax_v202303
datax-web
https://github.com/WeiYe-Jing/datax-web/tags
down
一波datax-web
的源码,用idea
打开,然后在bin
下新增一个health.sh
,一会在启动docker
容器时让后台常驻(我想的是直接调用原脚本启动,不改原来的启动脚本,所以自己塞了一个进去);
然后mvn clean install
一下,拿到datax-web-2.1.2.tar.gz
包;
因为我的mysql
是8
,datax
的read
和writer
下的lib
中没有对应的jdbc
驱动,所以需要手动下载塞进去
上面步骤都ok后,就可以开始打包镜像了;
我另一篇文章有写datax和datax-web
直接在宿主机部署,其实宿主机ok了,剩下的无法就是打包进docker
镜像
https://blog.csdn.net/weixin_43944305/article/details/133617114
health.sh
while true
do
jps | grep "Datax*"
sleep 30
done
打包镜像
将准备ok的datax文件夹和datax-web文件夹打包并压缩成tar.gz,然后写一个dockerfile,手动build下就可以用了
dockerfile
# 基础镜像
FROM openjdk:8
# author
MAINTAINER felix
# 创建目录
RUN mkdir -p /app
# work dir
workdir /app
# 复制文件到路径
add ./pro/datax.tar.gz .
add ./pro/datax-web-2.1.2.tar.gz .
# 启动服务
CMD sh -c "./datax-web-2.1.2/bin/install.sh --force" && sh -c "./datax-web-2.1.2/bin/start-all.sh" && sh -c "./datax-web-2.1.2/bin/health.sh"
docker-compose脚本
version: '3'
services:
datax-web:
build:
context: ./
dockerfile: ./Dockerfile
image: datax-web
container_name: datax-web
#restart: always
privileged: true
ports:
- 9527:9527
environment:
- TZ=Asia/Shanghai
- DB_HOST=mysql_8_0
- DB_PORT=3306
- DB_USERNAME=xxx
- DB_PASSWORD=xxx
- DB_DATABASE=datax_web
- PYTHON_PATH=/app/datax/bin/datax.py
networks:
- dev_net
networks:
dev_net:
external: true
重启脚本
每次都要手敲命令,整个脚本轻松一点
#!/bin/sh
echo '==============start stop==========='
docker stop datax-web
echo '==============end stop========='
#docker ps -a | grep datax-web | awk '{print $1}' | xargs docker stop
#docker rm datax-web
echo '=============start docker rm======='
docker ps -a | grep datax-web | awk '{print $1}' | xargs docker rm
echo '=============end docker rm========='
echo '=============start docker rmi======'
docker rmi datax-web
echo '=============end docker rmi========'
docker build -t datax-web:latest .
echo 'ready go'
docker-compose up -d