简介
我们已经手动生成证书/密钥、各种文件和配置,现在我们可以使用 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 使用手册。