DolphinScheduler 3.0.0 docker部署

 一、目标

        使用docker(不是docker-compose)去部署dolphinscheduler 3.0.0版本。

        本来以为dolphin的镜像应该和其他组件一样的流程(下载 -> 改配置 -> 运行),结果去docker官网下载镜像的时候发现,刚好从3.0.0开始,dolphin的镜像就是分开的了

DolphinScheduler 3.0.0 docker部署_第1张图片

        官网推荐使用docker-compose去部署,但是,我要部署到鲸云上,就必须用docker,而网上直接docker部署的文章少,所以自己部署完后来记录一下。

二、部署

1.构建自己的dockerfile镜像

        因为我使用mysql数据库,所以需要在镜像的libs目录中添加一个支持mysql的jar包,我添加的是mysql-connector-java-8.0.16.jar(需要的网上找一下应该就可以找到)

(1) api镜像

FROM apache/dolphinscheduler-api:3.0.0
COPY mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs

RUN apt-get update            

        api组件也是访问ui的组件,如果要访问dolphin的webUI的话,就要安装api

(2)master镜像

FROM apache/dolphinscheduler-master:3.0.0
COPY mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs

RUN apt-get update

(3)  worker镜像

FROM apache/dolphinscheduler-worker:3.0.0
COPY mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs

# 安装python3环境
RUN sudo apt-get update && \
    apt-get install -y --no-install-recommends curl && \
    rm -rf /var/lib/apt/lists/*

RUN apt-get update && \
    apt-get install -y --no-install-recommends python3 && \
    rm -rf /var/lib/apt/lists/*

RUN apt-get update && \
    apt-get install -y --no-install-recommends python3-pip && \
    rm -rf /var/lib/apt/lists/*

        worker镜像必须要有python镜像,不然跑不了,会报错

(4)alert镜像

FROM apache/dolphinscheduler-alert-server:3.0.0
COPY mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs

RUN apt-get update

        alert是负责告警的组件,不安装这个告警的功能就用不了 

(5)tools

        这个组件是初始化数据库的,也是需要放入mysql的jar包,修改mysql配置,但是我没用这个运行起来(这个镜像的bin目录下有一个upgrade-schema.sh的脚本,运行这个就行)

        我是用的之前本地dolphin用的mysql数据库,所以不用初始化,之前的数据也都在,迁移到鲸云的时候,也是直接导出之前mysql的数据为一个sql脚本;

2.打包镜像

(1) api

      在api的Dockerfile文件目录下面执行命令

docker build -t api:3.0.0 .

master:3.0.0 表示的是打包出来的镜像的名字,最末尾的 “ . ” 表示的是是当前目录下的Dockerfile文件

(2)master

         在master的Dockerfile文件目录下面执行命令

docker build -t master:3.0.0 .

master:3.0.0 表示的是打包出来的镜像的名字,最末尾的 “ . ” 表示的是是当前目录下的Dockerfile文件

(3)worker

docker build -t worker:3.0.0 .

(4)alter

docker build -t alter:3.0.0 .

3.修改配置

        4个组件下主要修改application.yaml、dolphinscheduler_env.sh两个配置文件即可

application.yaml:

datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://127.0.0.1:5432/dolphinscheduler
    username: root
    password: root


registry:
  type: zookeeper
  zookeeper:
    namespace: dolphinscheduler
    connect-string: localhost:2181
    retry-policy:
      base-sleep-time: 60ms
      max-sleep: 300ms
      max-retries: 5
    session-timeout: 30s
    connection-timeout: 9s
    block-until-connected: 600ms
    digest: ~

将上述的数据库地址改为自己的mysql数据库,例如

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dolphinscheduler
    username: root
    password: root


registry:
  type: zookeeper
  zookeeper:
    namespace: dolphinscheduler
    connect-string: localhost:2181
    retry-policy:
      base-sleep-time: 60ms
      max-sleep: 300ms
      max-retries: 5
    session-timeout: 30s
    connection-timeout: 9s
    block-until-connected: 600ms
    #如果你的zk开启了认证,则修改下面的zkName和zkPassword
    digest: zookeeperName:zookeeperPass

如果最下面有一个Spring里面也有数据库地址的话,并且你报错连接不到数据库,就把最下面的也改掉就行;

dolphinscheduler_env.sh:

# Database related configuration, set database type, username and password
export DATABASE=${DATABASE:-mysql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:mysql://mysqlUrl:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false"
export SPRING_DATASOURCE_USERNAME=root
export SPRING_DATASOURCE_PASSWORD=root

# Registry center configuration, determines the type and link of the registry center
export REGISTRY_TYPE=${REGISTRY_TYPE:-zookeeper}
export REGISTRY_ZOOKEEPER_CONNECT_STRING=${REGISTRY_ZOOKEEPER_CONNECT_STRING:-zkUrl:2181}

将上面几个配置修改为自己的mysql和zk地址即可,其他的环境变量,看自己需求修改,如果没其他需求就用默认的就行

4.运行容器

(1) api

docker run -d --name dolphinscheduler-api \
    -v /usr/local/docker/dolphin/api/conf:/opt/dolphinscheduler/conf \
    -p 12345:12345 \
    -d api:3.0.0

(2) master

docker run -d --name dolphinscheduler-master \
    -v /usr/local/docker/dolphin/master/conf:/opt/dolphinscheduler/conf \
    -d master:3.0.0

(3) worker

docker run -d --name dolphinscheduler-worker \
    -v /usr/local/docker/dolphin/worker/conf:/opt/dolphinscheduler/conf \
    -d worker:3.0.0

(4) alter

docker run -d --name dolphinscheduler-alter \
    -v /usr/local/docker/dolphin/alter/conf:/opt/dolphinscheduler/conf \
    -d alter:3.0.0

5.登录

        到这里,docker部署就已经完成了,接下来登录 http://localhost:12345/dolphinscheduler 就可以去使用了,默认用户admin,默认密码dolphinscheduler123

四、遇到的问题

问题1:  dolphin的4个组件是怎么关联起来的

        这里一开始我以为要配置什么ip地址,因为在本地使用jar包部署的时候,就有一个配置文件中,需要配置master的ip,worker的ip等。

        但是,其实docker部署是不需要这个配置的,我们配置的zk就是用来管理和关联这些组件的;每启动一个组件,这个组件就会去zk的指定的namespace下面注册自己的信息,注册内容是“ip:端口”,所以master要找worker的时候,就会去zk里面找worker注册的信息,就可以找到ip和端口去访问了

问题2: 鲸云上部署的时候,必须要设置暴露出来的端口,和检查健康的地址

 api:     

​ 端口:12345

 健康地址:http://localhost:12345/dolphinscheduler/actuator/health

master:       

​端口:5679

健康地址:http://localhost:12345/dolphinscheduler/actuator/healthhttp://localhost:5679/actuator/healthhttp://localhost:12345/dolphinscheduler/actuator/health

 worker:     

端口:1235

健康地址:http://localhost:12345/dolphinscheduler/actuator/healthhttp://localhost:1235/actuator/healthhttp://localhost:12345/dolphinscheduler/actuator/health

 alert:

端口:50053
健康地址:http://localhost:50053/actuator/health

问题3: 本地docker部署成功后,转移到鲸云上部署时候发现,master和worker访问使用的是容器名字(hostname),但是这个容器是是不知道这些hostname代表的ip是什么的,所以就报错不能识别hostname;去zk查看注册信息就会发现,注册的时候,就是用hostname注册的

​​​​​​​DolphinScheduler 3.0.0 docker部署_第2张图片

解决:

        因为鲸云底层其实是k8s,从启动的容器中执行命令env发现有两个env参数:

KUBERNETES_POD_NAME=app-e1d5b6be5f6c4d0a876d26cc-1-7866dc6fd-mw7ht 

KUBERNETES_POD_IP=10.172.131.105

这里他明显是拿 KUBERNETES_POD_NAME去注册了,所以我们需要去源码中简单修改一下,使代码用KUBERNETES_POD_IP去zk里面注册

类地址:org.apache.dolphinscheduler.common.utils.NetUtils

DolphinScheduler 3.0.0 docker部署_第3张图片

然后在使用dolphin已经写好的dockerfile重新打包一个master和worker镜像出来即可;

--如果你是新手,可以按照下面来执行:

1.去下载源码

2.编译:mvn clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true

3.修改好源码,具体就是添加上面图片的第一个if语句即可;

4.找到master和worker的dockerfile文件

DolphinScheduler 3.0.0 docker部署_第4张图片

 这里执行的时候 “ADD ./target/master-server $DOLPHINSCHEDULER_HOME”会去target文件下找master-server,然后添加到容器中,但是我执行的时候,一直说找不到这个地址,所以我直接把mastr-server这个目录放到了和我的Dockerfile同一个目录下了,然后把这个地方改成了“ADD ./master-server $DOLPHINSCHEDULER_HOME”;(这里targer下面的master-server、worker-server是在第二步编译的时候生成的,如果你清空了找不到,就再去编译一次)

5. 修改docker镜像的名字

DolphinScheduler 3.0.0 docker部署_第5张图片

DolphinScheduler 3.0.0 docker部署_第6张图片

6.运行

         你发现本地产生了你的docker镜像后,就大功告成了,然后和一开始的步骤一样给这个镜像添加好mysql的jar包,修改mysql地址,zk地址就可以用了;

你可能感兴趣的:(docker,java,容器,大数据)