制作canal-adapter的docker镜像

说明:

因为我们的中间件都是使用docker进行管理的,但是canal官方就很奇怪,在https://hub.docker.com/search?q=canal里面提供了canal-server和canal-admin的docker镜像包,偏偏没有canal-adapter,这就很恶心了。所以我们得要想办法把canal-adapter也制作成docker镜像,方便我们部署

如果需要怎么使用canal同步数据,可以参考https://blog.csdn.net/qiaodaima0/article/details/121998768?spm=1001.2014.3001.5502

环境:

我们以最新的1.1.6版本进行演示

步骤:

1、官网下载canal-adapter压缩包

https://github.com/alibaba/canal/releases/tag/canal-1.1.6
或直接点击下载https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.adapter-1.1.6.tar.gz
在这里插入图片描述

2、把压缩包上传服务器

我这里把canal.adapter-1.1.6.tar.gz压缩包上传到 服务器上,我这是传在 /opt/canal下
在这里插入图片描述

3、新建Dockerfile

Dockerfile需要和canal.adapter-1.1.6.tar.gz压缩包在同一个目录下

cd /opt/canal
vi Dockerfile

Dockerfile内容如下:

FROM openjdk:8-jre-alpine
# install canal-adapter
COPY canal.adapter-*.tar.gz /tmp/
	
RUN \
    mkdir -p /opt/canal-adapter && \
    tar -zxf /tmp/canal.adapter-*.tar.gz -C /opt/canal-adapter && \
    rm -r /tmp/canal.adapter-*.tar.gz

COPY startup.sh /opt/canal-adapter/bin/startup.sh

WORKDIR /opt/canal-adapter

CMD ["sh", "-c", "sh /opt/canal-adapter/bin/startup.sh && tail -F logs/adapter/adapter.log"]

里面有一行COPY startup.sh /opt/canal-adapter/bin/startup.sh,我们用外部的startup.sh启动脚本替换包里面的,他原本的那个启动脚本启动后是将pid进程以文件形式保存,导致使用docker命令重启容器的时候,会包进程已经存在,清先关闭进程,这样我们就只能进入容器内部进行重启,很不方便,我们调整下启动脚本

4、新建startup.sh启动脚本

也在同一个目录下

vi startup.sh

脚本内容如下:

#!/bin/bash

current_path=`pwd`
case "`uname`" in
    Linux)
		bin_abs_path=$(readlink -f $(dirname $0))
		;;
	*)
		bin_abs_path=`cd $(dirname $0); pwd`
		;;
esac
base=${bin_abs_path}/..
export LANG=en_US.UTF-8
export BASE=$base

if [ -f $base/bin/adapter.pid ] ; then
	echo "found adapter.pid , Please run stop.sh first ,then startup.sh" 2>&2
    exit 1
fi

if [ ! -d $base/logs ] ; then
	mkdir -p $base/logs
fi

## set java path
if [ -z "$JAVA" ] ; then
  JAVA=$(which java)
fi

ALIBABA_JAVA="/usr/alibaba/java/bin/java"
TAOBAO_JAVA="/opt/taobao/java/bin/java"
if [ -z "$JAVA" ]; then
  if [ -f $ALIBABA_JAVA ] ; then
  	JAVA=$ALIBABA_JAVA
  elif [ -f $TAOBAO_JAVA ] ; then
  	JAVA=$TAOBAO_JAVA
  else
  	echo "Cannot find a Java JDK. Please set either set JAVA or put java (>=1.5) in your PATH." 2>&2
    exit 1
  fi
fi

case "$#"
in
0 )
  ;;
2 )
  if [ "$1" = "debug" ]; then
    DEBUG_PORT=$2
    DEBUG_SUSPEND="n"
    JAVA_DEBUG_OPT="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=$DEBUG_SUSPEND"
  fi
  ;;
* )
  echo "THE PARAMETERS MUST BE TWO OR LESS.PLEASE CHECK AGAIN."
  exit;;
esac

str=`file -L $JAVA | grep 64-bit`
if [ -n "$str" ]; then
	JAVA_OPTS="-server -Xms2048m -Xmx3072m -Xmn1024m -XX:SurvivorRatio=2 -Xss256k -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError"
else
	JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=128m "
fi

JAVA_OPTS=" $JAVA_OPTS -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8"
ADAPTER_OPTS="-DappName=canal-adapter"

for i in $base/lib/*;
    do CLASSPATH=$i:"$CLASSPATH";
done

CLASSPATH="$base/conf:$CLASSPATH";

echo "cd to $bin_abs_path for workaround relative path"
cd $bin_abs_path

echo CLASSPATH :$CLASSPATH
exec $JAVA $JAVA_OPTS $JAVA_DEBUG_OPT $ADAPTER_OPTS -classpath .:$CLASSPATH com.alibaba.otter.canal.adapter.launcher.CanalAdapterApplication

5、构建镜像

在 /opt/canal 目录下执行构建命令,注意后面有个点

#构建镜像,时间会有点长
docker build -t canal/canal-adapter:v1.1.6 .

6、检验

#查看docker镜像
docker images

在这里插入图片描述

参考:
https://blog.csdn.net/daziyuanazhen/article/details/106098887

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值