手把手教你如何在Docker环境下安装elastic-job-cloud

手把手教你如何在Docker环境下安装elastic-job-cloud

前言

本文默认你本地已经安装好了Docker环境,同时也具备本地编译打包elastic-job-cloud的环境工具(Git, Maven, JDK),这里仅介绍如何在Docker环境下进行快速部署,下面为了书写方便,将elastic-job-cloud简称为EJC。

准备工作

首先的工作就是要将EJC依赖的Mesos环境搭建起来。
Mesos官网只有源码,如果本地编译需要安装很多系统编译工具,这里为了方便直接使用mesosphere公司发布的镜像。这里我就启动了一个agent,如果你需要多个的,多启动几个即可。
注意:我zk容器的地址为172.17.0.2,你们在部署的时候需要按照你们自己实际IP进行替换
1. 使用命令docker pull zookeeper下载zookeeper镜像
2. 使用命令docker pull mesosphere/mesos-master:1.6.0-rc1下载mesos-master镜像
3. 使用命令docker pull mesosphere/mesos-agent:1.6.0-rc1下载mesos-agent镜像
4. 使用命令command_1中的命令启动zookeeper
5. 使用命令docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container_id> 找出zk容器的IP地址
6. 使用命令command_2中的命令启动mesos-master。
7. 使用命令command_3中的命令启动mesos-agent
8. 浏览器输入http://localhost:5050, 即可查看Mesos Framework的UI操作界面
到这里EJC依赖的Mesos环境就搭建好了,可以使用docker logs container_id 来查看mesos的启动日志。
command_1:

docker run -d \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
zookeeper

command_2:

docker run \
-p 5050:5050 \
-e "MESOS_ZK=zk://172.17.0.2:2181/mesos" \
-e "MESOS_PORT=5050" \
-e "MESOS_LOG_DIR=/var/log/mesos" \
-e "MESOS_QUORUM=1" \
-e "MESOS_REGISTRY=in_memory" \
-e "MESOS_WORK_DIR=/var/lib/mesos" \
-d mesosphere/mesos-master:1.6.0-rc1

command_3:

docker run -d \
-e MESOS_PORT=5051 \
-e MESOS_MASTER=zk://172.17.0.2:2181/mesos \
-e MESOS_SWITCH_USER=0 \
-e MESOS_CONTAINERIZERS=docker,mesos \
-e MESOS_LOG_DIR=/var/log/mesos \
-e MESOS_WORK_DIR=/var/tmp/mesos \
-e MESOS_SYSTEMD_ENABLE_SUPPORT=false \
-v "$(pwd)/log/mesos:/var/log/mesos" \
-v "$(pwd)/tmp/mesos:/var/tmp/mesos" \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /sys:/sys \
-v /usr/local/bin/docker:/usr/local/bin/docker \
mesosphere/mesos-agent:1.6.0-rc1

Mesos的UI界面就是长这个样子:
MesosUI操作界面

进入正题

刚开始我以为EJC是远程调用Mesos服务来执行任务的,所以就直接在本地启动了EJC,结果就报错了,本地没有Mesos lib库,所以EJC的运行环境是要依赖Mesos的。这个时候我就只有2个选择,第一就是在本地安装Mesos,第二就是自制EJC的Docker镜像,毫无疑问我选择了第二种。

编译EJC

GitHub上下载或者clone代码到本地,执行mvn clean install获取zip压缩包。

镜像从何而来

对于Docker其实我只是一个初学者,查资料知道最好的方式就是写Dockerfile。因为镜像其实是有继承性的,所以我想的是基于Mesos的镜像,再安装下JDK,然后把EJC的包打进去就好了。于是就写了一个很简单的DockerFile,名称elastic-job-cloud-df

FROM mesosphere/mesos:1.6.0-rc1
MAINTAINER huyong <huyong5802@gmail.com>

RUN apt-get update && \
  apt-get -y install openjdk-8-jdk && \
  apt-get -y install unzip && \
  java -version
VOLUME /logs
ADD elastic-job-cloud.zip elastic-job-cloud.zip
RUN bash -c 'unzip elastic-job-cloud.zip'
ENTRYPOINT ["sh", "elastic-job-cloud/bin/start.sh"]

制作镜像

  1. 将编译而来的zip压缩包复制到Dockerfile同级目录下
  2. 解压zip压缩包
  3. 按照官方文档修改elastic-job-cloud-scheduler.properties文件的配置参数, config_demo是我的配置样例
  4. 到此,原则上应该说是准备完成了,但是我在运行docker的时候发现start.sh的脚本有些不兼容,报source not found[: =: unexpected operator 错误。所以我就source替换成了., 参数加上了双引号。至于你想问我为什么这么六,我只能告诉你多Google一下就好了。下面给出我的start.sh的脚本。
  5. 在Dockerfile的路径下使用docker build -t huyong/elastic-job-cloud:1.6.0-rc1 -f elastic-job-cloud-df .制作镜像

config_demo

# Routable IP address
hostname=172.17.0.5

# Username for mesos framework
user=root

# Mesos zookeeper address
mesos_url=zk://172.17.0.2:2181/mesos

# Role for mesos framework

#mesos_role=

# Elastic-Job-Cloud's zookeeper address
zk_servers=172.17.0.2:2181

# Elastic-Job-Cloud's zookeeper namespace
zk_namespace=elastic-job-cloud

# Elastic-Job-Cloud's zookeeper digest
zk_digest=

# Job rest API port
http_port=8899

# Max size of job accumulated
job_state_queue_size=100

# Event trace rdb config

#event_trace_rdb_driver=com.mysql.jdbc.Driver

#event_trace_rdb_url=jdbc:mysql://localhost:3306/elastic_job_cloud_log

#event_trace_rdb_username=root

#event_trace_rdb_password=

# Task reconciliation interval

#reconcile_interval_minutes=-1

# Enable/Disable mesos partition aware feature

# enable_partition_aware=false
#!/bin/bash
cd `dirname $0`
cd ..
DEPLOY_DIR=`pwd`
CONF_DIR=${DEPLOY_DIR}/conf
LIB_DIR=${DEPLOY_DIR}/lib/*
CONTAINER_MAIN=io.elasticjob.cloud.scheduler.Bootstrap
JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Djava.library.path=/usr/local/lib:/usr/lib:/usr/lib64"

. ${CONF_DIR}/elastic-job-cloud-scheduler.properties
if [ "${hostname}" = "" ] || [ "${hostname}" = "127.0.0.1" ] || [ "${hostname}" = "localhost" ]; then
  echo "Please config hostname in conf/elastic-job-cloud-scheduler.properties with a routable IP address."
  exit;
fi
export LIBPROCESS_IP=${hostname}

java ${JAVA_OPTS} -classpath ${CONF_DIR}/*:${LIB_DIR}:. ${CONTAINER_MAIN}

容器运行EJC

使用命令docker run -d -p 8899:8899 huyong/elastic-job-cloud:1.6.0-rc1 启动EJC,启动完成以后使用浏览器访问http://localhost:8899即可。
elastic-job-cloud UI操作界面

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值