2:Fabric源碼及鏡像文件處理
2.1下載Fabric源碼
下載Fabric源碼是因為要用到源碼中提到的列子和工具,工具編譯需要用到go語言環境,因此需要把源碼目錄放到$GOPATH下。通過1.3中go的安裝配置,$GOPATH設置為/opt/gopath。
我們可以使用Git命令下載源碼,也可以使用go get命令,偷懶一點,我們直接用go get命令獲取最新的Fabric源碼:
go get github.com/hyperledger/fabric
【注:使用離線環境或者內網環境的朋友可以直接選擇對應版本在github上下載,再通過ftp上傳到指定目錄即可】
這個可能等的時間比較久,等完成后,我們可以在~/go/src/github.com/hyperledger/fabric中找到所有的最新的源代碼。由於Fabric一直在更新,所有我們並不需要最新最新的源碼,需要切換到v1.0.0版本的源碼即可:
1 cd /opt/gopath/src/github.com/hyperledger/fabric/ 2 git checkout -b v1.0.0
本步驟也可直接在github上將源碼下載至本地,再通過ftp上傳至hyperledger目錄。
如果沒有git命令,還需要先執行以下命令,構建本地git環境。
yum install git
最終目錄在FTP的視圖正常情況下如下所示:
2.2下載Fabric相關鏡像文件
該操作有多種方式進行,如果是測試Fabric集群方案,直接進入fabric/examples/e2e_cli目錄下,運行./download-dockerimages.sh,即可下載該工程必要的鏡像文件。一般情況下,為了保證鏡像與下載到hyperledger中的源碼demo版本號相對應,該種方法屬於較為妥當的方案。
但為了今后升級方便,且版本可以由自己控制,故本次還將介紹另一種方案,也是筆者推薦的方案。
本次Fabric相關鏡像均可以在DockerHub官方鏡像網站進行下載,檢索HyperLedger,以hyperledger/fabric-peer為例,進入其下載頁面,官方給出的下載方式如下:
docker pull hyperledger/fabric-peer
但由於docker鏡像下載在沒有給出指定tag的情況下會默認使用lastest,而該方案最終可能會下載失敗,因此,在fabric-peer下載頁選中其tags標簽,查看當前fabric-peer最新版本號,根據我們所使用的操作系統情況,選擇x86_64-1.0.0版本,故最終執行的docker下載命令如下:
docker pull hyperledger/fabric-peer:x86_64-1.0.0
而fabric環境主要需要的鏡像有以下幾種:
hyperledger/fabric-tools hyperledger/fabric-orderer hyperledger/fabric-peer hyperledger/fabric-couchdb hyperledger/fabric-kafka hyperledger/fabric-ca hyperledger/fabric-zookeeper hyperledger/fabric-baseos
根據上述方案,可以將這些必要的鏡像由docker服務全部下載至本地,並最終使用docker-compose來啟動對應的鏡像服務。
【注:離線環境或內網環境的朋友,請通過其它能連接公網的服務器來操作這一步,后續可以將這些鏡像打包並在內網環境的服務器上進行恢復,具體操作看后續講述】
為了方便docker-compose的配置,我們將所有的鏡像tag都改為latest,執行如下格式的命令:
docker tag IMAGEID(鏡像id) REPOSITORY:TAG(倉庫:標簽)
例子
docker tag 0403fd1c72c7 docker.io/hyperledger/fabric-tools:latest
所有的鏡像文件及版本號修改完成后,執行如下命令:
docker images
其結果視圖應該如下:
如果下載下來的鏡像有問題,可以執行如下命令刪除指定Image ID的鏡像
docker rmi <image id> 或 docker rmi -f<image id>
刪除全部鏡像命令如下:
docker rmi $(docker images -q)
或
docker rmi -f $(docker images -q)
2.3鏡像備份和拷貝(該步驟並非必須,若無此需求,可以略過本步驟)
上述HyperLedger/Fabric鏡像數量較多且容量需求大,一套基本的服務鏡像可達10G左右,如果在多台服務器上部署,會耽誤很多時間。因此,對於上述已經下載至本地的鏡像,我們需要使用docker save命令來備份,並通過scp命令來將這些鏡像文件拷貝至其他服務器。
以鏡像hyperledger/fabric-peer為例:
在執行sava之前,需要先查詢當前鏡像包的Image ID,執行命令如下:
docker images
得到如下結果,可以看到我們已經下載下來的fabric-peer的Image ID是6830dcd7b9b5
我們可以執行如下命令在/tmp目錄下來生成該鏡像的tar包:
docker save 6830dcd7b9b5> /tmp/docker/fabric-images/peer.tar
上述命令結構為docker save IMAGEID(鏡像id) >(文件路徑及文件名)
根據上述命令,我們對其他已經下載下來的fabric鏡像分別執行打包操作,最后在/tmp/docker/fabric-images目錄下執行ls查看當前目錄鏡像文件,正常情況下會看到如下視圖:
該視圖只截取了一部分,且該視圖僅ls命令結果用作參考。
通過FTP可以看到目錄大致如下:
當所有的鏡像文件都被打包后,可以通過如下命令格式來發送鏡像:
scp fabric-peer.tar root@10.111.171.217:/tmp/docker/fabric-images
通過上述命令可以將鏡像文件遠程拷貝至10.111.171.217遠端服務器/tmp/docker/fabric-images目錄下,這里是內網ip,如果是在內網的環境下,拷貝速度會很快,外網則根據服務器自身網絡情況而定。
【注:離線環境或內網環境還是通過手工拷貝的方式吧,另外內網傳輸速度不盡人意的話,也用手工拷貝吧】
當遠端服務器接收到所有的鏡像文件后,可執行如下命令來加載這些鏡像文件:
docker load < /tmp/docker/fabric-peer.tar
鏡像加載完成后,可根據之前3的方案,將鏡像tag都改為lastest。