测试环境服务器安排:
名称 | IP | Hostname | 组织 | 备注 |
zookeeper1 | 10.16.3.97 | zookeeper1 | 公共 |
|
zookeeper2 | 10.16.3.98 | zookeeper2 | 公共 |
|
zookeeper3 | 10.16.3.99 | zookeeper3 | 公共 |
|
kafka1 | 10.16.3.92 | kafka1 | 公共 |
|
kafka2 | 10.16.3.93 | kafka2 | 公共 |
|
kafka3 | 10.16.3.94 | kafka3 | 公共 |
|
kafka4 | 10.16.3.95 | kafka4 | 公共 |
|
orderer0 | 10.16.8.91 | orderer0.example.com | org1 |
|
orderer1 | 10.16.8.92 | orderer1.example.com | org2 |
|
orderer2 | 10.16.8.93 | orderer2.example.com | org3 |
|
peer0org1 | 10.16.8.97 | peer0.org1.example.com | org1 | |
ca | 10.16.8.97 | peer0.org1.example.com | org1 |
|
安装步骤:
在所有机器上新建文件夹,mkdir /apps/fabric_kafka
在zookeeper1:/apps/fabric_kafka上新建docker-zookeeper1.yaml,内容
version: '2' services: zookeeper1: container_name: zookeeper1 hostname: zookeeper1 image: hyperledger/fabric-zookeeper restart: always environment: - ZOO_MY_ID=1 - ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888 ports: - "2181:2181" - "2888:2888" - "3888:3888" extra_hosts: - "zookeeper1:10.16.3.97" - "zookeeper2:10.16.3.98" - "zookeeper3:10.16.3.99" - "kafka1:10.16.3.92" - "kafka2:10.16.3.93" - "kafka3:10.16.3.94" - "kafka4:10.16.3.95"
在zookeeper2:/apps/fabric_kafka上新建docker-zookeeper2.yaml,内容
version: '2' services: zookeeper2: container_name: zookeeper2 hostname: zookeeper2 image: hyperledger/fabric-zookeeper restart: always environment: - ZOO_MY_ID=2 - ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888 ports: - "2181:2181" - "2888:2888" - "3888:3888" extra_hosts: - "zookeeper1:10.16.3.97" - "zookeeper2:10.16.3.98" - "zookeeper3:10.16.3.99" - "kafka1:10.16.3.92" - "kafka2:10.16.3.93" - "kafka3:10.16.3.94" - "kafka4:10.16.3.95"
在zookeeper3:/apps/fabric_kafka上新建docker-zookeeper3.yaml,内容
version: '2' services: zookeeper3: container_name: zookeeper3 hostname: zookeeper3 image: hyperledger/fabric-zookeeper restart: always environment: - ZOO_MY_ID=3 - ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888 ports: - "2181:2181" - "2888:2888" - "3888:3888" extra_hosts: - "zookeeper1:10.16.3.97" - "zookeeper2:10.16.3.98" - "zookeeper3:10.16.3.99" - "kafka1:10.16.3.92" - "kafka2:10.16.3.93" - "kafka3:10.16.3.94" - "kafka4:10.16.3.95"
在各zk机器上启动
docker-compose -f docker-zookeeper1.yaml up -d docker-compose -f docker-zookeeper2.yaml up -d docker-compose -f docker-zookeeper3.yaml up -d
在kafka1:/apps/fabric_kafka上新建docker-kafka1.yaml,内容
version: '2' services: kafka1: container_name: kafka1 hostname: kafka1 image: hyperledger/fabric-kafka restart: always environment: - KAFKA_BROKER_ID=1 - KAFKA_MIN_INSYNC_REPLICAS=2 - KAFKA_DEFAULT_REPLICATION_FACTOR=3 - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 - KAFKA_MESSAGE_MAX_BYTES=103809024 - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024 - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false - KAFKA_LOG_RETENTION_MS=-1 - KAFKA_HEAP_OPTS=-Xmx256M -Xms128M ports: - "9092:9092" extra_hosts: - "zookeeper1:10.16.3.97" - "zookeeper2:10.16.3.98" - "zookeeper3:10.16.3.99" - "kafka1:10.16.3.92" - "kafka2:10.16.3.93" - "kafka3:10.16.3.94" - "kafka4:10.16.3.95"
在kafka2:/apps/fabric_kafka上新建docker-kafka2.yaml,内容
version: '2' services: kafka2: container_name: kafka2 hostname: kafka2 image: hyperledger/fabric-kafka restart: always environment: - KAFKA_BROKER_ID=2 - KAFKA_MIN_INSYNC_REPLICAS=2 - KAFKA_DEFAULT_REPLICATION_FACTOR=3 - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 - KAFKA_MESSAGE_MAX_BYTES=103809024 - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024 - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false - KAFKA_LOG_RETENTION_MS=-1 - KAFKA_HEAP_OPTS=-Xmx256M -Xms128M ports: - "9092:9092" extra_hosts: - "zookeeper1:10.16.3.97" - "zookeeper2:10.16.3.98" - "zookeeper3:10.16.3.99" - "kafka1:10.16.3.92" - "kafka2:10.16.3.93" - "kafka3:10.16.3.94" - "kafka4:10.16.3.95"
在kafka3:/apps/fabric_kafka上新建docker-kafka3.yaml,内容
version: '2' services: kafka3: container_name: kafka3 hostname: kafka3 image: hyperledger/fabric-kafka restart: always environment: - KAFKA_BROKER_ID=3 - KAFKA_MIN_INSYNC_REPLICAS=2 - KAFKA_DEFAULT_REPLICATION_FACTOR=3 - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 - KAFKA_MESSAGE_MAX_BYTES=103809024 - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024 - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false - KAFKA_LOG_RETENTION_MS=-1 - KAFKA_HEAP_OPTS=-Xmx256M -Xms128M ports: - "9092:9092" extra_hosts: - "zookeeper1:10.16.3.97" - "zookeeper2:10.16.3.98" - "zookeeper3:10.16.3.99" - "kafka1:10.16.3.92" - "kafka2:10.16.3.93" - "kafka3:10.16.3.94" - "kafka4:10.16.3.95"
在kafka4:/apps/fabric_kafka上新建docker-kafka4.yaml,内容
version: '2' services: kafka4: container_name: kafka4 hostname: kafka4 image: hyperledger/fabric-kafka restart: always environment: - KAFKA_BROKER_ID=4 - KAFKA_MIN_INSYNC_REPLICAS=2 - KAFKA_DEFAULT_REPLICATION_FACTOR=3 - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 - KAFKA_MESSAGE_MAX_BYTES=103809024 - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024 - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false - KAFKA_LOG_RETENTION_MS=-1 - KAFKA_HEAP_OPTS=-Xmx256M -Xms128M ports: - "9092:9092" extra_hosts: - "zookeeper1:10.16.3.97" - "zookeeper2:10.16.3.98" - "zookeeper3:10.16.3.99" - "kafka1:10.16.3.92" - "kafka2:10.16.3.93" - "kafka3:10.16.3.94" - "kafka4:10.16.3.95"
在各kafka机器上启动
docker-compose -f docker-kafka1.yaml up -d docker-compose -f docker-kafka2.yaml up -d docker-compose -f docker-kafka3.yaml up -d docker-compose -f docker-kafka4.yaml up -d
在peer0org1:/apps/fabric_kafka上新建configtx.yaml,内容
Organizations: - &OrdererOrg Name: OrdererMSP ID: OrdererMSP MSPDir: crypto-config/ordererOrganizations/example.com/msp - &Org1 Name: Org1MSP ID: Org1MSP MSPDir: crypto-config/peerOrganizations/org1.example.com/msp AnchorPeers: - Host: peer0.org1.example.com Port: 7051 - &Org2 Name: Org2MSP ID: Org2MSP MSPDir: crypto-config/peerOrganizations/org2.example.com/msp AnchorPeers: - Host: peer0.org2.example.com Port: 7051 Orderer: &OrdererDefaults OrdererType: kafka Addresses: - orderer0.example.com:7050 - orderer1.example.com:7050 - orderer2.example.com:7050 BatchTimeout: 2s BatchSize: MaxMessageCount: 10 AbsoluteMaxBytes: 98 MB PreferredMaxBytes: 512 KB Kafka: Brokers: - 10.16.3.92:9092 - 10.16.3.93:9092 - 10.16.3.94:9092 - 10.16.3.95:9092 Organizations: Application: &ApplicationDefaults Organizations: Capabilities: Global: &ChannelCapabilities V1_1: true Orderer: &OrdererCapabilities V1_1: true Application: &ApplicationCapabilities V1_1: true Profiles: TwoOrgsOrdererGenesis: Orderer: <<: *OrdererDefaults Organizations: - *OrdererOrg Consortiums: SampleConsortium: Organizations: - *Org1 - *Org2 TwoOrgsChannel: Consortium: SampleConsortium Application: <<: *ApplicationDefaults Organizations: - *Org1 - *Org2
在peer0org1:/apps/fabric_kafka上新建crypto-config.yaml,内容
OrdererOrgs: - Name: Orderer Domain: example.com Specs: - Hostname: orderer0 - Hostname: orderer1 - Hostname: orderer2 PeerOrgs: - Name: Org1 Domain: org1.example.com Template: Count: 2 Users: Count: 1 - Name: Org2 Domain: org2.example.com Template: Count: 2 Users: Count: 1
在peer0org1:/apps/fabric_kafka上执行
mkdir channel-artifacts configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/mychannel.tx -channelID mychannel
mkdir chaincode/go/chaincode_example02/go
讲fabric-example里面的chaincode_example02.go放置chaincode/go/chaincode_example02/go目录中
scp -r crypto-config channel-artifacts 10.16.8.91:/apps/fabric-kafka
scp -r crypto-config channel-artifacts 10.16.8.92:/apps/fabric-kafka
scp -r crypto-config channel-artifacts 10.16.8.93:/apps/fabric-kafka
在orderer0:/apps/fabric_kafka上新建docker-orderer0.yaml,内容
version: '2' services: orderer0.example.com: container_name: orderer0.example.com image: hyperledger/fabric-orderer environment: - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_kafka_default - ORDERER_GENERAL_LOGLEVEL=debug - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - ORDERER_GENERAL_LISTENPORT=7050 - ORDERER_GENERAL_GENESISMETHOD=file - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block - ORDERER_GENERAL_LOCALMSPID=OrdererMSP - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp - ORDERER_GENERAL_TLS_ENABLED=false - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] - ORDERER_KAFKA_RETRY_LONGINTERVAL=10s - ORDERER_KAFKA_RETRY_LONGTOTAL=100s - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s - ORDERER_KAFKA_VERBOSE=true - ORDERER_KAFKA_BROKERS=[10.16.3.92:9092,10.16.3.93:9092,10.16.3.94:9092,10.16.3.95:9092] working_dir: /opt/gopath/src/github.com/hyperledger/fabric command: orderer volumes: - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - ./crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp:/var/hyperledger/orderer/msp - ./crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/:/var/hyperledger/orderer/tls networks: default: aliases: - fabric_kafka ports: - 7050:7050 extra_hosts: - "kafka1:10.16.3.92" - "kafka2:10.16.3.93" - "kafka3:10.16.3.94" - "kafka4:10.16.3.95"
在orderer1:/apps/fabric_kafka上新建docker-orderer1.yaml,内容
version: '2' services: orderer1.example.com: container_name: orderer1.example.com image: hyperledger/fabric-orderer environment: - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_kafka_default - ORDERER_GENERAL_LOGLEVEL=debug - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - ORDERER_GENERAL_LISTENPORT=7050 - ORDERER_GENERAL_GENESISMETHOD=file - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block - ORDERER_GENERAL_LOCALMSPID=OrdererMSP - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp - ORDERER_GENERAL_TLS_ENABLED=false - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] - ORDERER_KAFKA_RETRY_LONGINTERVAL=10s - ORDERER_KAFKA_RETRY_LONGTOTAL=100s - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s - ORDERER_KAFKA_VERBOSE=true - ORDERER_KAFKA_BROKERS=[10.16.3.92:9092,10.16.3.93:9092,10.16.3.94:9092,10.16.3.95:9092] working_dir: /opt/gopath/src/github.com/hyperledger/fabric command: orderer volumes: - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - ./crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/msp:/var/hyperledger/orderer/msp - ./crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/tls/:/var/hyperledger/orderer/tls networks: default: aliases: - fabric_kafka ports: - 7050:7050 extra_hosts: - "kafka1:10.16.3.92" - "kafka2:10.16.3.93" - "kafka3:10.16.3.94" - "kafka4:10.16.3.95"
在orderer2:/apps/fabric_kafka上新建docker-orderer2.yaml,内容
version: '2' services: orderer2.example.com: container_name: orderer2.example.com image: hyperledger/fabric-orderer environment: - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_kafka_default - ORDERER_GENERAL_LOGLEVEL=debug - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - ORDERER_GENERAL_LISTENPORT=7050 - ORDERER_GENERAL_GENESISMETHOD=file - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block - ORDERER_GENERAL_LOCALMSPID=OrdererMSP - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp - ORDERER_GENERAL_TLS_ENABLED=false - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] - ORDERER_KAFKA_RETRY_LONGINTERVAL=10s - ORDERER_KAFKA_RETRY_LONGTOTAL=100s - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s - ORDERER_KAFKA_VERBOSE=true - ORDERER_KAFKA_BROKERS=[10.16.3.92:9092,10.16.3.93:9092,10.16.3.94:9092,10.16.3.95:9092] working_dir: /opt/gopath/src/github.com/hyperledger/fabric command: orderer volumes: - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/var/hyperledger/orderer/msp - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/:/var/hyperledger/orderer/tls networks: default: aliases: - fabric_kafka ports: - 7050:7050 extra_hosts: - "kafka1:10.16.3.92" - "kafka2:10.16.3.93" - "kafka3:10.16.3.94" - "kafka4:10.16.3.95"
在各orderer机器上启动
docker-compose -f docker-orderer0.yaml up -d
docker-compose -f docker-orderer1.yaml up -d
docker-compose -f docker-orderer2.yaml up -d
在peer0org1:/apps/fabric_kafka上新建docker-peer0.yaml,内容
version: '2' services: couchdb: container_name: couchdb image: hyperledger/fabric-couchdb ports: - "5984:5984" ca: container_name: ca image: hyperledger/fabric-ca environment: - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - FABRIC_CA_SERVER_CA_NAME=ca - FABRIC_CA_SERVER_TLS_ENABLED=false - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/555290c50d91fbfd50c03f6abb08910dab00a84403826e4ed97e48bbf287c268_sk ports: - "7054:7054" command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/555290c50d91fbfd50c03f6abb08910dab00a84403826e4ed97e48bbf287c268_sk -b admin:adminpw -d' volumes: - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config peer0.org1.example.com: container_name: peer0.org1.example.com image: hyperledger/fabric-peer environment: - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=10.16.8.89:5984 - CORE_PEER_ID=peer0.org1.example.com - CORE_PEER_NETWORKID=fabric_kafka - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052 - CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052 - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 - CORE_PEER_LOCALMSPID=Org1MSP - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_kafka_default - CORE_VM_DOCKER_TLS_ENABLED=false - CORE_LOGGING_LEVEL=DEBUG - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true - CORE_PEER_GOSSIP_USELEADERELECTION=true - CORE_PEER_GOSSIP_ORGLEADER=false - CORE_PEER_PROFILE_ENABLED=false - CORE_PEER_TLS_ENABLED=false - 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 volumes: - /var/run/:/host/var/run/ -./chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/chaincode/go - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer command: peer node start ports: - 7051:7051 - 7052:7052 - 7053:7053 depends_on: - couchdb networks: default: aliases: - fabric_kafka extra_hosts: - "orderer0.example.com:10.16.8.91" - "orderer1.example.com:10.16.8.92" - "orderer2.example.com:10.16.8.93" cli: container_name: cli image: hyperledger/fabric-tools tty: true environment: - GOPATH=/opt/gopath - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - CORE_LOGGING_LEVEL=DEBUG - CORE_PEER_ID=cli - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052 - CORE_PEER_LOCALMSPID=Org1MSP - CORE_PEER_TLS_ENABLED=false - 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 - 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 - 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 working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer volumes: - /var/run/:/host/var/run/ - ./chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/chaincode/go - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts depends_on: - peer0.org1.example.com extra_hosts: - "orderer0.example.com:10.16.8.91" - "orderer1.example.com:10.16.8.92" - "orderer2.example.com:10.16.8.93" - "peer0.org1.example.com:10.16.8.89"
注意:此处的555290c50d91fbfd50c03f6abb08910dab00a84403826e4ed97e48bbf287c268_sk要换成实际生成的私钥文件名
在peer0org1机器上启动
docker-compose -f docker-peer0.yaml up -d
在peer0org1机器上执行
docker exec -it cli bash peer channel create -o orderer0.example.com:7050 -c mychannel -f ./channel-artifacts/mychannel.tx peer channel join -b mychannel.block
peer chaincode install -n mychannel -p github.com/hyperledger/fabric/chaincode/go/chaincode_example02/go -v 1.0
peer chaincode instantiate -o orderer0.example.com:7050 -C mychannel -n mychannel -c '{"Args":["init","A","10","B","10"]}' -P "OR ('Org1MSP.member','Org2MSP.member')" -v 1.0
peer chaincode query -C mychannel -n mychannel -c '{"Args":["query", "A"]}'
peer chaincode invoke -o orderer2.example.com:7050 -C mychannel -n mychannel -c '{"Args":["invoke","A","B","1"]}'
peer chaincode invoke -o orderer0.example.com:7050 -C mychannel -n mychannel -c '{"Args":["invoke","A","B","1"]}'
peer chaincode invoke -o orderer1.example.com:7050 -C mychannel -n mychannel -c '{"Args":["invoke","A","B","1"]}'
peer chaincode query -C mychannel -n mychannel -c '{"Args":["query", "A"]}'
至此,Fabric分布式环境搭建完毕!