Hyperledger Fabric 1.0 从零开始(四)——Fabric源码及镜像文件处理

2Fabric源码及镜像文件处理

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版本的源码即可:

 cd /opt/gopath/src/github.com/hyperledger/fabric/
git checkout -b v1.0.0

本步骤也可直接在github上将源码下载至本地,再通过ftp上传至hyperledger目录。

如果没有git命令,还需要先执行以下命令,构建本地git环境。

yum install git

最终目录在FTP的视图正常情况下如下所示:

Hyperledger Fabric 1.0 从零开始(四)——Fabric源码及镜像文件处理

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.

而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

其结果视图应该如下:

Hyperledger Fabric 1.0 从零开始(四)——Fabric源码及镜像文件处理

如果下载下来的镜像有问题,可以执行如下命令删除指定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

Hyperledger Fabric 1.0 从零开始(四)——Fabric源码及镜像文件处理

我们可以执行如下命令在/tmp目录下来生成该镜像的tar包:

docker save 6830dcd7b9b5> /tmp/docker/fabric-images/peer.tar

上述命令结构为docker save IMAGEID(镜像id) >(文件路径及文件名)

根据上述命令,我们对其他已经下载下来的fabric镜像分别执行打包操作,最后在/tmp/docker/fabric-images目录下执行ls查看当前目录镜像文件,正常情况下会看到如下视图:

Hyperledger Fabric 1.0 从零开始(四)——Fabric源码及镜像文件处理

该视图只截取了一部分,且该视图仅ls命令结果用作参考。

通过FTP可以看到目录大致如下:

Hyperledger Fabric 1.0 从零开始(四)——Fabric源码及镜像文件处理

当所有的镜像文件都被打包后,可以通过如下命令格式来发送镜像:

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。

上一篇:5分钟完全掌握Python协程


下一篇:Jmeter之集合点