美文网首页
network_start.sh分析

network_start.sh分析

作者: Jarvist | 来源:发表于2018-12-11 15:51 被阅读0次
#传入第一个参数 up/down/start
UP_DOWN="$1" 
#channel名字 下文可以看到默认为mychannel
CH_NAME="$2"
#CLI响应timeout 
CLI_TIMEOUT="$3"
#是否使用couchdb
IF_COUCHDB="$4"

#默认为10000ms
: ${CLI_TIMEOUT:="10000"}

composefile的路径
COMPOSE_FILE=docker-compose-cli.yaml
COMPOSE_FILE_COUCH=docker-compose-couch.yaml
#对传入参数进行校验
function validateArgs () {
        #up_down变量为空
    if [ -z "${UP_DOWN}" ]; then
        echo "Option up / down / restart not mentioned"
        printHelp #上面有个printhelp函数 就不写了UP_DOWN
        exit 1
    fi
        # channel名称为空
    if [ -z "${CH_NAME}" ]; then
        echo "setting to default channel 'mychannel'"UP_DOWN
        CH_NAME=mychannel #改为mychannel
    fi
}
#network down时候执行,清除容器
function clearContainers () {
        #获取容器ID 
        #docker ps :列出正在运行的容器
        #docker ps -a 列出所有容器(包括未运行的)、-q 静默模式,只显示ID -aq 所有容器ID
        CONTAINER_IDS=$(docker ps -aq)
        if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" = " " ]; then
                echo "---- No containers available for deletion ----"
        else
                #docker rm -f 强制删除容器UP_DOWN
                docker rm -f $CONTAINER_IDS
        fi
}
UP_DOWN
#network down时候执行 移除镜像
function removeUnwantedImages() {
        #获取不需要的镜像的ID,grep找TAG,awk打印第三个字段(就是ID)
        DOCKER_IMAGE_IDS=$(docker images | grep "dev\|none\|test-vp\|peer[0-9]-" | awk '{print $3}')
        if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" = " " ]; then
                echo "---- No images available for deletion ----"
        else
                #docker rmi 移除镜像
                docker rmi -f $DOCKER_IMAGE_IDS
        fi
}
# 开启网络
function networkUp () {
   #判断crypto-config目录是否存在,是
    if [ -d "./crypto-config" ]; then
      echo "crypto-config directory already exists."
   #否: 调用generateArtifacts.sh 脚本 ,传入$CH_NAME(channelname,此脚本第二个传入的参数,默认为mychannel)
    else
      #Generate all the artifacts that includes org certs, orderer genesis block,
      # channel configuration transaction
      source generateArtifacts.sh $CH_NAME
    fi
    #是否使用couchdb
    if [ "${IF_COUCHDB}" == "couchdb" ]; then
    #变量赋值 docker-compose 通过一个配置文件来管理多个Docker容器  这里通过cli.yaml和couchdb.yaml进行配置    2>&1:错误也输出到屏幕
      CHANNEL_NAME=$CH_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH up -d 2>&1
    else
      CHANNEL_NAME=$CH_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE up -d 2>&1 
    fi
    #上一条命令不执行成功
    if [ $? -ne 0 ]; then
    echo "ERROR !!!! Unable to pull the images "
    exit 1
    fi
    #查看名为cli的容器的日志
    docker logs -f cli
}
#关闭网络,主要运行上面几个函数
function networkDown () {
    docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH down

    #Cleanup the chaincode containers
    clearContainers

    #Cleanup images
    removeUnwantedImages

    # remove orderer block and other channel configuration transactions and certs 移除block等文件
    rm -rf channel-artifacts/*.block channel-artifacts/*.tx crypto-config
}

#脚本主要逻辑 先验证参数,再通过UP_DOWN分别执行不同的函数
validateArgs

#Create the network using docker compose
if [ "${UP_DOWN}" == "up" ]; then
    networkUp
elif [ "${UP_DOWN}" == "down" ]; then ## Clear the network
    networkDown
elif [ "${UP_DOWN}" == "restart" ]; then ## Restart the network
    networkDown
    networkUp
else
    printHelp
    exit 1
fi

相关文章

网友评论

      本文标题:network_start.sh分析

      本文链接:https://www.haomeiwen.com/subject/ugfehqtx.html