目录
1. docker-compose 管理容器
2. fabric 相关 docker 镜像
3. docker-compose-base.yaml 配置
4. peer-base.yaml配置
5. 环境变量
5.1 客户端cli环境变量:`docker-compose-cli.yaml`
5.2 排序节点`orderer`环境变量:`docker-compose-base.yaml`
5.3 peer节点环境变量:`docker-compose-base.yaml`和`peer-base.yaml`
6. leader节点
7. docker-compose启动
最后
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.yaml和peer-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节点之间通信,peer和orderer节点通信的节点叫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)