分享

【超级账本】docker-compose部分介绍(四)

 小生凡一 2021-11-30

目录

1. docker-compose 管理容器

节点在docker容器中运行,docker-compose管理docker容器

examples/e2e_cli/docker-compose-cli.yaml

version:# docker-compose的版本

volume:# 数据卷,指定Docker中一块持久化的区域,该区域在容器消失之后,还可以依然将区域中的数据保存下来。这部分区域不在属于某一个容器了,而是由dockercompose管理的一部分区域

networks:# 网络,所有的docker在同一个网络才能进行数据通信

services:# 服务,orderer和peer组织的节点
    orderer.example.com:                        # 服务名(排序节点和peer节点)
    extends:                                   # 继承了下面file路径下文件的一些属性
        file:base/docker-compose-base.yaml      # 不用改
        service:orderer.example.com             # 和前面的服务名保持一致
    container_name:orderer.example.com          # 容器名,和前面的服务名保持一致

    cli:客户端服务(java sdk,go sdk,shell)
        container_name:cli                      # 容器名
        image:hyperledger/fabric-tools:latest  # fabric镜像路径,可以指定tag
        tty:true                               # 启动容器的时候状态可能为:Exited (0) About a minute ago,需要设置tty为true
        stdin_open:true                        # 标准输入,true或false
        environment:                           # 环境变量相关设置
        
        working_dir:                           # 工作目录
        commend:                               # 启动docker后执行的命令
        volumes:                               # 数据卷
            # 挂载目录,默认就行
            - /var/run/:/host/var/run/      
            # 链码存放路径(go或者node.js写的链代码)
            - ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go
            # 存放证书的路径
            - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
             # 脚本存放路径
            - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
            # 生成的创世块和管道以及更新的锚节点文件存放的路径(tx和block后缀的文件)
            - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
            # 注意:./channel-artifacts这种是指路径,需要本地有这个路径,或者改成自己的路径

        depends_on: # 启动顺序
          - orderer.example.com
          - peer0.org1.example.com
          - peer1.org1.example.com
          - peer0.org2.example.com
          - peer1.org2.example.com

base的路径:examples/e2e_cli/base

启动容器的数量 = depends_on的数量 + cli的数量

2. fabric 相关 docker 镜像

都在hyperleger路径下

fabric-peer:peer节点镜像
fabric-orderer:orderer节点镜像
fabric-tools:工具镜像,cryptogen等工具都在这里面
fabric-ca:ca模块镜像,可以用来生成账号
fabric-ccenv:go语言链码运行环境镜像
fabric-kafka:kafka镜像
fabric-zookeeper:zookeeper镜像
fabric-couchdb:couchdb数据库镜像

3. docker-compose-base.yaml 配置

路径:examples/e2e_cli/base/docker-compose-base.yaml

version: # 版本号
services:# 服务,有排序节点、peer节点等
    # 服务名
        continer_name:# 容器名
        image:# 镜像路径:lastst
        enviroment:# 环境
        working_dir:# 工作目录
        commend:# 启动后执行的命令
        volumens:# 挂载创世块,证书,通道的文件
            # 注意第一个路径是自己存放文件的路径,第二个对应的docker中的,不需要改,多了个本地路径和docker服务器镜像的路径
            ports:# 端口映射

4. peer-base.yaml配置

version: '2'         # 版本号
services:
  peer-base:          # 服务名,和docker-compose-base.yaml中保持一致
    image: hyperledger/fabric-peer    # 镜像,:latest
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock     # socket套接字
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2ecli_default     # 网络模式
      - CORE_LOGGING_LEVEL=DEBUG      #日志級別
      - CORE_PEER_TLS_ENABLED=true  # 是否tls加密
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      # 是否自动选举leader节点,建议设置为true,当一个leader挂掉后会自动产生leader
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start

5. 环境变量

5.1 客户端cli环境变量:docker-compose-cli.yaml


- GOPATH=/opt/gopath  # go的工作目录        
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock     # 守护进程的套接字,不用改   
- CORE_LOGGING_LEVEL=DEBUG  # 日志級別 ,critical、error、warning、notice、info、debug  
- CORE_PEER_ID=cli# peer节点的id,自己指定一个就行,就是当前客户端节点的id
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051  # 要连接的peer节点
- CORE_PEER_LOCALMSPID=Org1MSP# peer组织id
- CORE_PEER_TLS_ENABLED=true# 是否使用tls加密,通信的时候
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt# tls证书文件
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key# tls私钥文件
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt# 根证书文件
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp# 指定客户端的身份,管理员身份目录

5.2 排序节点orderer环境变量:docker-compose-base.yaml

- ORDERER_GENERAL_LOGLEVEL=debug# 日志級別
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0# 监听地址
- ORDERER_GENERAL_GENESISMETHOD=file# 创世块来源,这里file指来源于文件
- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block # 创世块对应的文件,不是指本地的,是docker中的,base.yaml中orderer的volume关联
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP# orderer节点的id
- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp  # orderer节点的msp路径,不是指本地的,是docker中的,base.yaml中orderer的volume关联
- ORDERER_GENERAL_TLS_ENABLED=true# enabled TLS,是否使用tls加密
- ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key  # 私钥,不是指本地的,是docker中的,base.yaml中orderer的volume关联
- ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt  # 证书,不是指本地的,是docker中的,base.yaml中orderer的volume关联
- ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] # 根证书,不是指本地的,是docker中的,base.yaml中orderer的volume关联

5.3 peer节点环境变量:docker-compose-base.yamlpeer-base.yaml


# 当前peer节点的名字,可以改 CORE_PEER_ID=peer0.org1.example.com 访问地址 
CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # chaincode 监听地址
CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052 #被组织外节点识别时的地址,以加入网络 
CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 #peer节点的组织名 CORE_PEER_LOCALMSPID=Org1MSP
CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock# socket套接字
CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2ecli_default  # 网络模式
CORE_LOGGING_LEVEL=DEBUG  # 日志級別
CORE_PEER_TLS_ENABLED=true  # 是否tls加密
CORE_PEER_GOSSIP_USELEADERELECTION=true
# 是否自动选举leader节点,建议设置为true,当一个leader挂掉后会自动产生leader
CORE_PEER_GOSSIP_ORGLEADER=false
# 当前节点是否是leader节点,建议设置为false,让自动选举产生leader即可
CORE_PEER_PROFILE_ENABLED=true   # profile服务是否开启
CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt  # 证书
CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key # 私钥
CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt # 根证书,ca证书

6. leader节点

peer节点之间通信,peerorderer节点通信的节点叫leader,通过选举产生,只有leader才可以和orderer节点进行通信

7. docker-compose启动

  • 启动
    docker-compose -f docker-compose-cli.yaml up -d
    -f:指定配置文件,默认是docker-compose.yml或docker-compose.yaml
    -d:以守护进程运行

  • 查看启动状态
    docker-compose ps
    docker-compose -f docker-compose-cli.yaml ps

  • 停止
    docker-compose down -v
    -f 文件路径,默认文件名是docker-compose.yaml
    -v 详细信息

  • 查看所有容器
    docker ps -a

  • 删除容器
    docker rm 687b66dd8e36(容器id)

  • 查看日志
    docker logs 9a1a500bf720(容器id)

最后

小生凡一,期待你的关注。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多