6、使用 docker 启动 fabric 镜像服务

177 阅读2分钟

简介

我们已经手动生成证书/密钥、各种文件和配置,现在我们可以使用 Docker 容器启动 Fabric 网络。

docker-compose 文件关联了我们之前下载的镜像,通过我们之前生成的创世区块 genesis.block 引导排序节点。我们之所以要手动运行这些命令,目的是为了探索和理解每个命令的功能。

docker-compose-cli.yaml

docker 容器的启动依赖于文件 docker-compose-cli.yaml,而d ocker-compose-cli.yaml 文件也引用了 base 目录下的 peer-base.yaml 和 docker-compose-base.yaml 文件,接下来重点介绍 docker-compose-cli.yaml 文件,1.4 版本文件内容如下:

version: '2'

volumes:
  orderer.example.com:
  peer0.org1.example.com:
  peer1.org1.example.com:
  peer0.org2.example.com:
  peer1.org2.example.com:

networks:
  byfn:

# 服务
services:
  
  # 排序服务
  orderer.example.com:
    # 依赖的配置文件以及启动后的服务名
    extends:
      file:   base/docker-compose-base.yaml
      service: orderer.example.com
    
    # docker 容器名
    container_name: orderer.example.com
    
    # 所属网络
    networks:
      - byfn
  
  # 节点服务
  peer0.org1.example.com:
    # 启动后对应的 docker 容器名
    container_name: peer0.org1.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer0.org1.example.com
    networks:
      - byfn

  peer1.org1.example.com:
    container_name: peer1.org1.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer1.org1.example.com
    networks:
      - byfn

  peer0.org2.example.com:
    container_name: peer0.org2.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer0.org2.example.com
    networks:
      - byfn

  peer1.org2.example.com:
    container_name: peer1.org2.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer1.org2.example.com
    networks:
      - byfn

  # 客户端服务(容器服务)
  cli:
    container_name: cli
    
    # fabric cli 服务对应的镜像名
    image: hyperledger/fabric-tools:$IMAGE_TAG
    
    # 是否支持伪客户端访问
    tty: true
    
    # 是否支持标准输入
    stdin_open: true
    
    # 容器环境变量配置
    environment:
    
      # 使用系统通道
      - SYS_CHANNEL=$SYS_CHANNEL
      
      # golang workspace
      - GOPATH=/opt/gopath
      
      # docker socket 文件路径
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      
      #- FABRIC_LOGGING_SPEC=DEBUG fabric 日志级别
      - FABRIC_LOGGING_SPEC=INFO
      
      # 默认登录客户端的节点身份信息(默认以 org1.peer0 节点身份登录)
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      - CORE_PEER_LOCALMSPID=Org1MSP
      
      # TLS 加密通信
      - 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
      
      # 用于加密通信的 CA 根证书路径
      - 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
      
      # 该节点身份对应的 MSP 文件夹绝对路径
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
      
    # 节点的工作目录  
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    # 脚本命令
    command: /bin/bash
    # 容器卷配置(将虚拟机本地文件映射到 docker 容器的指定文件夹)
    volumes:
        - /var/run/:/host/var/run/
        - ./../chaincode/:/opt/gopath/src/github.com/chaincode
        - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
        - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
        - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
        
    # 服务依赖(一个排序服务、两个组织对应的 4 个 peer 节点)
    depends_on:
      - orderer.example.com
      - peer0.org1.example.com
      - peer1.org1.example.com
      - peer0.org2.example.com
      - peer1.org2.example.com
      
    networks:
      - byfn

启动

首先,启动我们的网络(-d 表示在后台执行,不显示详细网络日志信息)

docker-compose -f docker-compose-cli.yaml up -d

若启动成功,显示如下:

总结

ok,我们已经成功使用 docker 启动了 fabric 所需要的镜像服务,可以使用 docker ps -a 进行查看,与镜像相关的命令请自行查询 docker 使用手册。