- 首先你要有个 docker ,这里就不展示 docker 的部署了,可以自行百度
下载 datax 源代码
https://github.com/alibaba/DataX/archive/refs/tags/datax_v202210.tar.gz
准备 dockerfile 文件
- 因为公司需要用 python3,而 maven 的镜像里面只有 python 2,而且基础镜像是 debian,装python 太麻烦了,就直接拉了一个 python 镜像,通过多阶段构建,复制了一个 java 到 python 镜像,用来验证 datax 在 python3 环境是否正常
FROM maven:3.6.2 as build ADD DataX-datax_v202210.tar.gz /tmp/ WORKDIR /tmp/DataX-datax_v202210 RUN mvn -U clean package assembly:assembly -Dmaven.test.skip=true FROM python:3.6.15 ENV JAVA_HOME=/usr/local/openjdk-11 ENV PATH=$PATH:$JAVA_HOME/bin COPY --from=build /usr/local/openjdk-11 /usr/local/openjdk-11 COPY --from=build /tmp/DataX-datax_v202210/target/datax/datax /datax RUN python3 /datax/bin/datax.py /datax/job/job.json
构建镜像
docker build -t datax:python3 .
- 构建完成后会有类似下面的输出,说明 datax 编译没有问题,并且可以在 python3 的环境下使用
2023-03-31 10:03:36.534 [job-0] INFO JobContainer - [total cpu info] => averageCpu | maxDeltaCpu | minDeltaCpu -1.00% | -1.00% | -1.00% [total gc info] => NAME | totalGCCount | maxDeltaGCCount | minDeltaGCCount | totalGCTime | maxDeltaGCTime | minDeltaGCTime G1 Young Generation | 0 | 0 | 0 | 0.000s | 0.000s | 0.000s G1 Old Generation | 0 | 0 | 0 | 0.000s | 0.000s | 0.000s 2023-03-31 10:03:36.534 [job-0] INFO JobContainer - PerfTrace not enable! 2023-03-31 10:03:36.534 [job-0] INFO StandAloneJobContainerCommunicator - Total 100000 records, 2600000 bytes | Speed 253.91KB/s, 10000 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 0.027s | All Task WaitReaderTime 0.049s | Percentage 100.00% 2023-03-31 10:03:36.536 [job-0] INFO JobContainer - 任务启动时刻 : 2023-03-31 18:03:26 任务结束时刻 : 2023-03-31 18:03:36 任务总计耗时 : 10s 任务平均流量 : 253.91KB/s 记录写入速度 : 10000rec/s 读出记录总数 : 100000 读写失败总数 : 0 Removing intermediate container 4aee10b5af79 ---> fbbf32aa8242 Successfully built fbbf32aa8242 Successfully tagged datax:python3
获取 datax 的 tar 包
datax 构建完成后,会生成一个 tar 包,通过 inspect 去查看路径,然后直接拿出来用
docker images | head -n 3
返回的结果类似如下,<none>
是多阶段构建的时候留下来的缓存镜像
REPOSITORY TAG IMAGE ID CREATED SIZE datax python3 fbbf32aa8242 58 minutes ago 2.8GB <none> <none> 2faebd0752ab 58 minutes ago 5.9GB
使用 inspect 命令查看镜像的路径
docker inspect 2faebd0752ab | grep "UpperDir"
返回的结果类似如下
"UpperDir": "/data/docker/graph/overlay2/8c92f5323790d3dcf3022831c93dc2b1846bcb7ba097da04e23ab788e67211a9/diff",
结合上面获取到的路径,和下面的路径拼接,就可以获取到 tar 包了
tmp/DataX-datax_v202210/target/datax.tar.gz
完事之后,镜像就可以删除了,留着也没啥用(docker 就是拿来编译的工具的,休想玷污我的环境)