Docker & Dubbo:Dubbo提供者部署到Docker容器

很简单的一个工作日志。
如果我们把服务提供者打包到镜像,那不在本文讨论范围。
我只是想记录一下,利用 -v 参数挂载本地目录来执行Dubbo的服务提供者。

首先,我们需要将Provider使用Main函数启动(如果你是将Provider放到Tomcat容器中跑,那也不在本文讨论的范围)。

假如我们有一个叫community-provider.jar的文件,在本地执行它的命令行是:

java -jar community-provider.jar app-context.xml llw-provider.xml 

当然,我们也可以这样:

java -jar -Ddubbo.protocol.port=30882 community-provider.jar app-context.xml llw-provider.xml 

现在,我们需要将它部署到Docker容器中运行,那么我们可以先写一个小的脚本,把上面那一长串命令行包住。

#!/bin/bash
cd `dirname $0`

SERVER_NAME="Community-Provider"
JAR_FILE="community-provider-0.0.1.jar"
JAR_CONF="conf/application-context.xml conf/community-provider.xml"
SERVER_PORT="30881"
LOGS_DIR="logs"

DUBBO_OPTS=""
if [ -n "$1" ]; then 
    SERVER_PORT=$1
fi 
DUBBO_OPTS="-Ddubbo.protocol.port=$SERVER_PORT"

if [ ! -d $LOGS_DIR ]; then
    mkdir $LOGS_DIR
fi
STDOUT_FILE=$LOGS_DIR/stdout.$SERVER_PORT.log

JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "

JAVA_MEM_OPTS=""
BITS=`java -version 2>&1 | grep -i 64-bit`
if [ -n "$BITS" ]; then
    JAVA_MEM_OPTS=" -server -Xmx2g -Xms2g -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
else
    JAVA_MEM_OPTS=" -server -Xms1g -Xmx1g -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
fi

echo -e "Starting $SERVER_NAME .../c"
java $JAVA_OPTS $JAVA_MEM_OPTS $DUBBO_OPTS -jar $JAR_FILE $JAR_CONF 

嗯,看上去这一段脚本一点也不小,的确,这是我参考dubbo-simple项目中生成的start.sh脚本改写的。

关键是最后那句。

保存上面的脚本为start_provider_docker.sh,配置成+x。现在我们就可以方便地使用-v挂载的方式启动这个Dubbo的服务提供者了,再写一个启动容器的脚本run_provider.sh :

#!/bin/bash
docker run -d --name comm-provider-$1 --net=host -v /home/provider:/home java:7-jre /home/start_provider_docker.sh $1

以后,我们想要启动一个服务提供者,并在30888端口上提供服务,只需要这样:

./run_provider.sh 30888

猜您喜欢

要发表评论,您必须先登录