docker运行datax实现数据同步方案 -- docker build 篇 「爱情、让人受尽委屈。」 2022-03-31 10:58 1756阅读 0赞 上一篇纪录了datax及其docker commit测试方法,这里我推荐使用自动构建docker build构建一个带jdk+maven+python的docker镜像。 docker build基础理论就是先获得一个基础镜像,然后对镜像做的每一步骤操作都封装,一步一步的得到一个多重操作封装过的功能镜像。其中在封装的过程中有几个指定的命令参数,具体可以自行百度,这里分享下用docker build构建datax的镜像。 我的方案是: 拉去centos基础镜像,下载jdk、maven、datax等解压好(python在centos中自带,所以不需要再单独下载一个), 进行docker build,先把解压的文件copy到基础镜像中,再设定镜像中的jdk、maven的环境变量,最后update镜像的yum。 在git上,有人直接拉去基础镜像后在里面镜像apt-get jdk、maven等方式,这种方法也是可以的,前提条件是安装的机器能连上网络,而我是下载安装包进行copy,可以在无网络的情况下进行docker build。 git中datax地址:[https://github.com/beginor/docker-datax][https_github.com_beginor_docker-datax] 我的dockerfile代码(已经下载并解压好了jdk、maven): FROM centos MAINTAINER test@test.com COPY jdk1.8 /data/jdk1.8 COPY maven3.6 /data/maven3.6 COPY datax /data/datax #这里copy前面是宿主机的目录,该目录不能指定绝对路径,只能在同dockerfile一个文件夹内, #否则build的时候copy指令会报错,后面的文件夹是docker镜像的文件夹,如果镜像内没有该地址, #build会自动创建一个,copy的时候只会copy宿主机文件夹里面的数据,即例如jdk1.8, #只会复制文件夹内的数据,不会复制jdk1.8文件夹,所以在后面的docker镜像路径中, #我们要指定并新建一个jdk1.8 ENV JAVA_HOME=/data/jdk1.8 ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV MAVEN_HOME /data/maven3.6 ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin #注意,path环境变量必须要带上系统$path,由于dockerbuild是覆盖的形式, #如果不带上$path,会导致build出来的镜像运行的时候会没有centos的基本操作命令 RUN yum update -y 编辑好了dockerfile,接下来执行docker build命令进行镜像构建: docker build -t centos:datax-update --no-cache --rm=true . #-t 接后面的centos:datax-update 代表我要给我构建的镜像取得REPOSITORY名字和tag名字 #--no-cach 代表执行成功后不保存构建过程中得缓存 # --rm 代表构建成功得话,删除构建过程中得中间镜像 # . 代表当前路径,docker build 指令是要加【参数】+【dockerfile路径】的, #由于我的当前目录就是在dockerfile下,所以我用 . 代表我的dockerfile的路径位置 下面是我的build执行情况: #查看我dockerfile路径位置的情况,有datax、jdk1.8、maven3.6等文件已解压并放在该目录 [root@service docker]# ls datax dockerfile jdk1.8 maven3.6 #编辑dockerfile文件,把dockerfile的代码放进去 [root@service docker]# vi dockerfile #执行docker build命令,让docker自动构建镜像 [root@service docker]# docker build -t centos:datax-update --no-cache --rm=true . Sending build context to Docker daemon 1.306GB Step 1/10 : FROM centos #第一步执行过程中docker先获取了centos基础镜像 ---> 1e1148e4cc2c Step 2/10 : MAINTAINER test@test.com #第二步它写入了镜像构建者的联系方式并生成一个新的镜像 ---> Running in b86cb05ab158 Removing intermediate container b86cb05ab158 ---> 18bb1d66f8b9 Step 3/10 : COPY jdk1.8 /data/jdk1.8 #第三步复制了jdk文件夹到第二步的镜像中,并生成一个新的镜像 ---> dc10cb28dbfb Step 4/10 : COPY maven3.6 /data/maven3.6 #第四步它复制了maven到第三步的镜像中并生成一个镜像 ---> d0b50d52efbb Step 5/10 : COPY datax /data/datax #同理,生成一个新的镜像5 ---> d37e75d540d0 Step 6/10 : ENV JAVA_HOME=/data/jdk1.8 #同理,基于镜像5,生成一个新的镜像6 ---> Running in 722382b94473 Removing intermediate container 722382b94473 ---> b32d8c90a5b5 Step 7/10 : ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ---> Running in a93ef0e9aa30 Removing intermediate container a93ef0e9aa30 ---> f7df4255b761 Step 8/10 : ENV MAVEN_HOME /data/maven3.6 ---> Running in 1f2a2a602cfa Removing intermediate container 1f2a2a602cfa ---> 0d57e64c3f3e Step 9/10 : ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin ---> Running in 6611598a61e7 Removing intermediate container 6611598a61e7 ---> 4f2d068bcfc7 Step 10/10 : RUN yum update -y #一直到这里,生成最后镜像10 ---> Running in 5eb492ecb5e9 Loaded plugins: fastestmirror, ovl Determining fastest mirrors * base: mirror.scalabledns.com * extras: repos-tx.psychz.net * updates: repos.lax.quadranet.com No packages marked for update Removing intermediate container 5eb492ecb5e9 ---> 810decb2b8ad Successfully built 810decb2b8ad Successfully tagged centos:datax-update [root@service docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos datax-update 810decb2b8ad 20 minutes ago 1.58GB centos datax de2c4dc5fe8a 34 minutes ago 609MB centos latest 1e1148e4cc2c 4 weeks ago 202MB centos7 latest 688353a31fde 2 years ago 447MB 如果我没有build命令中加入 --no-cache --rm=true参数,那么实际上在构建过程中产生的10个镜像都不会被删除,且都能够按照docker生成的image id进行启动,所以,建议大家在第一次的时候不要带删除中间镜像的操作,如果在build中出现错误了,我们可以docker run 启动一下上一个成功的镜像进行排错操作。 最后docker images查看我的镜像,生成了一个1.5G的新镜像,这个镜像就是已经打包好maven、jdk、python、datax的新镜像 -------------------- 启动打包好的镜像查看情况: #启动容器 [root@service docker]# docker run -it --name datax 810decb2b8ad /bin/bash #这里已经是容器内,切换到根目录查看是否自动新建了data文件夹 [root@8ec3fabb3594 /]# cd / [root@8ec3fabb3594 /]# ls anaconda-post.log bin data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@8ec3fabb3594 /]# cd /data [root@8ec3fabb3594 data]# ls datax jdk1.8 maven3.6 #查看java、maven版本,环境变量是否生效 [root@8ec3fabb3594 data]# java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode) [root@8ec3fabb3594 data]# mvn -v Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T18:41:47Z) Maven home: /data/maven3.6 Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /data/jdk1.8/jre Default locale: en_US, platform encoding: ANSI_X3.4-1968 OS name: "linux", version: "3.10.0-862.2.3.el7.x86_64", arch: "amd64", family: "unix" 到这里我们就成功的制作了一个datax镜像,之后就可以直接运行了,关于datax的操作,会单独再做一篇进行纪录。 [https_github.com_beginor_docker-datax]: https://github.com/beginor/docker-datax
还没有评论,来说两句吧...