Hyperledger Fabric 1.0 版本整體 重新設計了架構,新的設計可以實現更好的擴展性和安全性。
下載 Compose 模板文件
$ git clone https://github.com/yeasy/docker-compose-files
進入 hyperledger/1.0
目錄,查看包括若干模板文件,功能如下。
包含 orderer 和 peers 組織結構的基礎服務模板
docker-compose-1peer.yaml
使用自定義的 channel
啟動一個最小化的環境,包括 1 個 peer 節點、1 個 orderer 節點、1 個 CA 節點、1 個 cli 節點
docker-compose-2orgs-4peers.yaml
使用自定義的 channel
啟動一個環境,包括 4 個 peer 節點、1 個 orderer 節點、1 個 CA 節點、1 個 cli 節點
docker-compose-2orgs-4peers-couchdb.yaml
docker-compose-2orgs-4peers-event.yaml
e2e_cli/channel-artifacts
存放創建 orderer, channel, anchor peer 操作時的配置文件
安裝並配置 dokcer 和 docker-compose
scripts/download_images.sh
自動化測試腳本,用來初始化 channel
和 chaincode
自動化測試腳本,用來執行 chaincode 操作
安裝 Docker 和 docker-compose
docker 及 docker-compose 可以自行手動安裝。也可以通過 hyperledger/1.0/scripts 提供的 setup_Docker.sh
腳本自動安裝。
$ bash scripts/setup_Docker.sh
獲取 Docker 鏡像
Docker 鏡像可以自行從源碼編譯(make docker
),或從 DockerHub 倉庫下載。
執行腳本獲取
直接執行 hyperledger/1.0/scripts 提供的 download_images.sh
腳本獲取。
$ bash scripts/download_images.sh
從官方倉庫獲取
從社區 DockerHub 倉庫下載。
# pull fabric images
ARCH=x86_64
BASEIMAGE_RELEASE=0.3.1
BASE_VERSION=1.0.0
PROJECT_VERSION=1.0.0
IMG_TAG=1.0.0
echo "Downloading fabric images from DockerHub...with tag = ${IMG_TAG}... need a while"
# TODO: we may need some checking on pulling result?
docker pull hyperledger/fabric-peer:$ARCH-$IMG_TAG
docker pull hyperledger/fabric-orderer:$ARCH-$IMG_TAG
docker pull hyperledger/fabric-ca:$ARCH-$IMG_TAG
docker pull hyperledger/fabric-tools:$ARCH-$IMG_TAG
docker pull hyperledger/fabric-ccenv:$ARCH-$PROJECT_VERSION
docker pull hyperledger/fabric-baseimage:$ARCH-$BASEIMAGE_RELEASE
docker pull hyperledger/fabric-baseos:$ARCH-$BASEIMAGE_RELEASE
# Only useful for debugging
# docker pull yeasy/hyperledger-fabric
echo "===Re-tagging images to *latest* tag"
docker tag hyperledger/fabric-peer:$ARCH-$IMG_TAG hyperledger/fabric-peer
docker tag hyperledger/fabric-orderer:$ARCH-$IMG_TAG hyperledger/fabric-orderer
docker tag hyperledger/fabric-ca:$ARCH-$IMG_TAG hyperledger/fabric-ca
docker tag hyperledger/fabric-tools:$ARCH-$IMG_TAG hyperledger/fabric-tools
從第三方倉庫獲取
這裡也提供了調整(基於 golang:1.8 基礎鏡像製作)後的第三方鏡像,與社區版本功能是一致的。
通過如下命令拉取相關鏡像,並更新鏡像別名。
$ ARCH=x86_64
$ BASEIMAGE_RELEASE=0.3.1
$ BASE_VERSION=1.0.0
$ PROJECT_VERSION=1.0.0
$ IMG_TAG=1.0.0
$ docker pull yeasy/hyperledger-fabric-base:$IMG_VERSION \
&& docker pull yeasy/hyperledger-fabric-peer:$IMG_VERSION \
&& docker pull yeasy/hyperledger-fabric-orderer:$IMG_VERSION \
&& docker pull yeasy/hyperledger-fabric-ca:$IMG_VERSION \
&& docker pull hyperledger/fabric-couchdb:$ARCH-$IMG_VERSION \
&& docker pull hyperledger/fabric-kafka:$ARCH-$IMG_VERSION \
&& docker pull hyperledger/fabric-zookeeper:$ARCH-$IMG_VERSION
$ docker tag yeasy/hyperledger-fabric-peer:$IMG_VERSION hyperledger/fabric-peer \
&& docker tag yeasy/hyperledger-fabric-orderer:$IMG_VERSION hyperledger/fabric-orderer \
&& docker tag yeasy/hyperledger-fabric-ca:$IMG_VERSION hyperledger/fabric-ca \
&& docker tag yeasy/hyperledger-fabric-peer:$IMG_VERSION hyperledger/fabric-tools \
&& docker tag yeasy/hyperledger-fabric-base:$IMG_VERSION hyperledger/fabric-ccenv:$ARCH-$PROJECT_VERSION \
&& docker tag yeasy/hyperledger-fabric-base:$IMG_VERSION hyperledger/fabric-baseos:$ARCH-$BASEIMAGE_RELEASE \
&& docker tag yeasy/hyperledger-fabric-base:$IMG_VERSION hyperledger/fabric-baseimage:$ARCH-$BASEIMAGE_RELEASE \
&& docker tag hyperledger/fabric-couchdb:$ARCH-$IMG_VERSION hyperledger/fabric-couchdb \
&& docker tag hyperledger/fabric-zookeeper:$ARCH-$IMG_VERSION hyperledger/fabric-zookeeper \
&& docker tag hyperledger/fabric-kafka:$ARCH-$IMG_VERSION hyperledger/fabric-kafka
啟動 fabric 1.0 網絡
通過如下命令快速啟動。
$ bash scripts/start_fabric.sh
或者
$ docker-compose -f docker-compose-2orgs-4peers.yaml up
注意輸出日誌中無錯誤信息。
此時,系統中包括 7 個容器。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8683435422ca hyperledger/fabric-peer "bash -c 'while true;" 19 seconds ago Up 18 seconds 7050-7059/tcp fabric-cli
f284c4dd26a0 hyperledger/fabric-peer "peer node start --pe" 22 seconds ago Up 19 seconds 7050/tcp, 0.0.0.0:7051->7051/tcp, 7052/tcp, 7054-7059/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
95fa3614f82c hyperledger/fabric-ca "fabric-ca-server sta" 22 seconds ago Up 19 seconds 0.0.0.0:7054->7054/tcp fabric-ca
833ca0d8cf41 hyperledger/fabric-orderer "orderer" 22 seconds ago Up 19 seconds 0.0.0.0:7050->7050/tcp orderer.example.com
cd21cfff8298 hyperledger/fabric-peer "peer node start --pe" 22 seconds ago Up 20 seconds 7050/tcp, 7052/tcp, 7054-7059/tcp, 0.0.0.0:9051->7051/tcp, 0.0.0.0:9053->7053/tcp peer0.org2.example.com
372b583b3059 hyperledger/fabric-peer "peer node start --pe" 22 seconds ago Up 20 seconds 7050/tcp, 7052/tcp, 7054-7059/tcp, 0.0.0.0:10051->7051/tcp, 0.0.0.0:10053->7053/tcp peer1.org2.example.com
47ce30077276 hyperledger/fabric-peer "peer node start --pe" 22 seconds ago Up 20 seconds 7050/tcp, 7052/tcp, 7054-7059/tcp, 0.0.0.0:8051->7051/tcp, 0.0.0.0:8053->7053/tcp peer1.org1.example.com
測試網絡
啟動 fabric 網絡後,可以進行 chaincode 操作,驗證網絡是否啟動正常。
進入到 cli 容器裡面,執行 initialize.sh
和 test_4peers.sh
腳本。
通過如下命令進入容器 cli 並執行測試腳本。
$ docker exec -it fabric-cli bash
$ bash ./scripts/initialize.sh
注意輸出日誌無錯誤提示,最終返回結果應該為:
UTC [main] main -> INFO 00c Exiting.....
===================== Chaincode Instantiation on PEER2 on channel 'businesschannel' is successful =====================
===================== All GOOD, initialization completed =====================
_____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/
之後同樣是在 cli
容器裡執行 test_4peers.sh
腳本
$ bash ./scripts/test_4peers.sh
輸出日誌無錯誤提示,最終返回結果應該為:
Query Result: 80
UTC [main] main -> INFO 008 Exiting.....
===================== Query on PEER3 on channel 'businesschannel' is successful =====================
===================== All GOOD, End-2-End execution completed =====================
_____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/
至此,整個網絡啟動並驗證成功。