Thingsboard (二) docker 运行分析

启动过程详解 Github

创建日志文件夹
./docker-create-log-folders.sh

安装
./docker-install-tb.sh --loadDemo`

  1. 添加 .env 内的环境变量,这只数据库,dockerhub等信息。

  2. 执行 compose-utlis.sh 内的函数 设置

    ADDITIONAL_COMPOSE_QUEUE_ARGS="-f docker-compose.kafka.yml"
    ADDITIONAL_COMPOSE_ARGS="-f docker-compose.postgres.yml"
    ADDITIONAL_STARTUP_SERVICES=postgres

  3. 运行 docker-compose -f docker-compose.yml -f docker-compose.postgres.yml -f docker-compose.kafka.yml up -d redis postgres
    后台启动redis postgres

  4. 运行 docker-compose -f docker-compose.yml -f docker-compose.postgres.yml -f docker-compose.kafka.yml run --no-deps --rm -e INSTALL_TB=true -e LOAD_DEMO=true tb-core1
    --no-deps 单独启动,不依赖 -e 设置环境变量 --rm 运行完删除容器
    启动 tb-core1 镜像

启动服务
./docker-start-services.sh
运行docker-compose -f docker-compose.yml -f docker-compose.postgres.yml -f docker-compose.kafka.yml up -d
后台运行所有容器。

官方给的docker文件都是从官方docker hub拉取镜像的,运行自己的程序要自己本机编译改docker-compose.yml镜像为自己的项目

启动文件分析

.env

总结:设置引用到的项目名称,数据库类型

DOCKER_REPO=thingsboard
JS_EXECUTOR_DOCKER_NAME=tb-js-executor
TB_NODE_DOCKER_NAME=tb-node
WEB_UI_DOCKER_NAME=tb-web-ui
MQTT_TRANSPORT_DOCKER_NAME=tb-mqtt-transport
HTTP_TRANSPORT_DOCKER_NAME=tb-http-transport
COAP_TRANSPORT_DOCKER_NAME=tb-coap-transport
TB_VERSION=latest
DATABASE=postgres    #cassandra
LOAD_BALANCER_NAME=haproxy-certbot

compose-utils.sh

总结:根据DATABASE=postgres,设置ADDITIONAL_COMPOSE_ARGS="-f docker-compose.postgres.yml"

#!/bin/bash
# 里面的函数功能都差不多
...
function additionalComposeArgs() {
    source .env    # 当前文件范围加载 环境变量
    ADDITIONAL_COMPOSE_ARGS=""
    case $DATABASE in    #相当于switch语句
        postgres)
        ADDITIONAL_COMPOSE_ARGS="-f docker-compose.postgres.yml"
        ;;
        cassandra)
        ADDITIONAL_COMPOSE_ARGS="-f docker-compose.cassandra.yml"
        ;;
        *)
        echo "Unknown DATABASE value specified: '${DATABASE}'. Should be either postgres or cassandra." >&2
        exit 1
    esac
    echo $ADDITIONAL_COMPOSE_ARGS # 返回值
}
...

3. docker-install-tb.sh

总结:后台启动docker-compose.yml里的redisdocker-compose.postgres.yml里的postgresdocker-compose.postgres.yml里的tb-core1

#!/bin/bash
while [[ $# -gt 0 ]] # 循环读取传入参数 如果有传入参数--loadDemo,则设置LOAD_DEMO=true
...    


if [ "$LOAD_DEMO" == "true" ]; then  # 按LOAD_DEMO=true,设置loadDemo
...    

set -e    # 命令错误立即退出

#compose-utils.sh提供调用的三个方法,设置获取数据库类型和名称,引用文件,发生错误返回上次命令的返回值
source compose-utils.sh    
ADDITIONAL_COMPOSE_QUEUE_ARGS=$(additionalComposeQueueArgs) || exit $?  
ADDITIONAL_COMPOSE_ARGS=$(additionalComposeArgs) || exit $?  
ADDITIONAL_STARTUP_SERVICES=$(additionalStartupServices) || exit $?  


# 把ADDITIONAL_STARTUP_SERVICES替换为“ ”,-z判断长度为0则为真,!取反
if [ ! -z "${ADDITIONAL_STARTUP_SERVICES// }" ]; then
    docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS up -d redis $ADDITIONAL_STARTUP_SERVICES
fi
# 把ADDITIONAL_STARTUP_SERVICES替换为“ ”,-z判断长度为0则为真,!取反

#运行tb,添加环境变量INSTALL_TB=true,LOAD_DEMO=true
docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS 、
$ADDITIONAL_COMPOSE_QUEUE_ARGS run --no-deps --rm -e INSTALL_TB=true -e LOAD_DEMO=${loadDemo} tb-core1 

3. docker-start-services.sh

总结:docker-compose -f docker-compose.yml -f docker-compose.postgres.yml up -d,后台运行所有容器。

#!/bin/bash  
set -e  
source compose-utils.sh  
ADDITIONAL_COMPOSE_QUEUE_ARGS=$(additionalComposeQueueArgs) || exit $?  
ADDITIONAL_COMPOSE_ARGS=$(additionalComposeArgs) || exit $?  
docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS $ADDITIONAL_COMPOSE_QUEUE_ARGS up -d  
# 全体起立
posted @ 2020-04-08 10:54  harmful  阅读(889)  评论(1编辑  收藏  举报