Hyperledger Fabric 1.0 学习搭建 (二)--- 源码及镜像文件处理
2.1下载Fabric源码
下载Fabric源码是因为要用到源码中提到的列子和工具, 工具编译需要用到go语言环境, 因此需要把源码目录放到$GOPATH下。 通过1.3中go的安装配
置, $GOPATH设置为/opt/gopath。
我们可以使用Git命令下载源码, 也可以使用go get命令, 偷懒一点, 我们直接用go get命令获取最新的Fabric源码:
go get github.com/hyperledger/fabric
这个可能等的时间比较久, 等完成后, 我们可以在~/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的视图正常情况下如下所示:

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标签,
https://hub.docker.com/r/hyperledger/fabric-peer/tags/ ,
查看当前fabric-peer最新版本号, 根据我们所使用的操作系统情况, 选择x86_64-1.0.0版本, 故最终执行的docker下载命令如下:
docker pull hyperledger/fabric-peer:x86_64-1.0.0
而fabric环境主要需要的镜像有以下几种:
以下几种镜像都需要制定特定的版本:x86_64-1.0.0 红色的三个镜像是最基本最重要的三个, 可以支持测试版本, 如果只是为了测试, 那么可以先安装这三个。
hyperledger/fabric-tools
hyperledger/fabric-orderer:x86_64-1.0.0
hyperledger/fabric-peer:x86_64-1.0.0
hyperledger/fabric-couchdb
hyperledger/fabric-kafka
hyperledger/fabric-ca:x86_64-1.0.0
hyperledger/fabric-ccenv
hyperledger/fabric-baseimage:x86_64-0.4.0
根据上述方案,可以将这些必要的镜像由docker服务全部下载至本地,并最终使用docker-compose来启动对应的镜像服务。
为了方便docker-compose的配置,我们将所有的镜像tag都改为latest,执行如下格式的命令:
docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
或者 docker tag old-image[:old-tag] new-image[:new-tag]
例子
docker tag 0403fd1c72c7 docker.io/hyperledger/fabric-tools:latest
或者: docker tag entel_zmc_images entel_zmc_images:zmc_base
latest
这个latest其实在使用中不是最新的意思,而是默认值(defalut)的意思。
也就是说,如果在tag为可选的命令中,我们没有写上tag,如 docker pull entel_zmc_images:zmc_base vs docker pull entel_zmc_images ,前
者有确定的tag,而后者没有,这时系统会自动添加一个:latest标签,然后去匹配。
这时如果latest对应的镜像不存在就会报错!
运行镜像
理解了latest,那么下面两种方式就很简单了。
# 运行默认镜像,默认会找tag
docker run entel_zmc_images
# 运行指定tag的镜像
docker run entel_zmc_images:zmc_base
所有的镜像文件及版本号修改完成后,执行如下命令:
docker images
其结果视图应该如下:

如果下载下来的镜像有问题, 可以执行如下命令删除指定Image ID的镜像
docker rmi <image id>
或 do
cker rmi -f<image id>
删除全部镜像命令如下:
docker rmi $(docker images -q)
或 do
cker rmi -f $(docker images -q)
docker镜像的版本控制
如果需要升级某个docker镜像,我们可以这样做。
1.给每个新生成的镜像都打上相应版本的tag。此时可能存在image:latest、image:v1、image:v2等。
2.我们要从v1升级到v2,首先我们将导入的v2镜像强制重命名为image:latest,命令为docker tag -f image:v2 image:latest
3.docker stop之前正在运行的容器
4.启用docker run image,此时image的等价镜像image:latest就是最新的V2镜像。
总结下步骤:load/tag/stop/run
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可以看到目录大致如下:
, 且该视图仅ls命令结果用作参考。通过FTP可以看到目录大致如下:
声明:本教程参考 深蓝 和 Aberic博客编写而成,链接: http://www.cnblogs.com/studyzy/p/7237287.html 和 https://www.cnblogs.com/aberic/p/7527831.html, 且该视图仅ls命令结果用作参考。通过FTP可以看到目录大致如下:
, 且该视图仅ls命令结果用作参考。通过FTP可以看到目录大致如下:
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。
Hyperledger Fabric 1.0 学习搭建 (二)--- 源码及镜像文件处理的更多相关文章
- Hyperledger Fabric 1.0 学习搭建 (三)--- 运行测试e2e-Fabric
3.1.运行fabric-samples的问题说明 该问题说明能够解决6.1.平台特定使用的二进制文件配置第一步的问题.可以选择继续阅读该说明,或者等参考到6.1小节时再反向阅读本说明,具体在6.1中 ...
- Hyperledger Fabric 1.0 学习搭建 (五)--- 启动Fabric多节点集群
5.1.启动orderer节点服务 上述操作完成后,此时各节点的compose配置文件及证书验证目录都已经准备完成,可以开始尝试启动多机Fabric集群. 首先启动orderer节点,切换至order ...
- Hyperledger Fabric 1.0 学习搭建 (四)--- 创建Fabric多节点集群
4.1.配置说明 首先可以根据官方Fabric自带的e2e_cli列子中的集群方案来生成我们自己的集群,与案例不同的是我们需要把容器都分配到不同的服务器上,彼此之间通过网络来进行通信,网络构建完成后则 ...
- Hyperledger Fabric 1.0 学习搭建 (一)--- 基础环境搭建
1: 环境构建在本文中用到的宿主机环境是Centos ,版本为Centos.x86_64 7.2, 一定要用7版本以上, 要不然会安装出错. 通过Docker 容器来运行Fabric的节点,版本为v1 ...
- Hyperledger Fabric 1.0 从零开始(四)——Fabric源码及镜像文件处理
2:Fabric源码及镜像文件处理 2.1下载Fabric源码 下载Fabric源码是因为要用到源码中提到的列子和工具,工具编译需要用到go语言环境,因此需要把源码目录放到$GOPATH下.通过1.3 ...
- Hyperledger Fabric 1.0 从零开始(二)——环境构建(公网)
1:环境构建 在本文中用到的宿主机环境是Centos ,版本为Centos.x86_647.2,通过Docker 容器来运行Fabric的节点,版本为v1.0.因此,启动Fabric网络中的节点需要先 ...
- Hyperledger Fabric的test-network启动过程Bash源码详解
前言 在基于Debian搭建Hyperledger Fabric 2.4开发环境及运行简单案例中,我们已经完成了Fabric 2.4的环境搭建及fabric-samples/test-network官 ...
- Tomcat9.0环境搭建与源码编译
使用IntelliJ IDEA 搭建Tomcat9.0项目 准备条件: 下载源码 这里我们下载的Tomcat的源码版本是9.0.12. 下载地址: https://tomcat.apache ...
- Hyperledger Fabric 1.0 从零开始(一)
在HyperLedger/Fabric发布0.6的时候,公司就已经安排了一个团队研究这一块,后来也请IBM的专家组过来培训了一批人,不幸的是,这批人后来全走了,然后1.0就发布了.自从2017年7月H ...
随机推荐
- Linux下jdk安装过程
注意:rpm 与软件相关命令 相当于 window 下的软件助手 管理软件 1 查看当前 Linux 系统是否已经安装 java 1)在命令窗口输入,可以查看系统自带的OpenJDK版本信息. jav ...
- java.utils.UUID类介绍
1 UUID介绍 UUID (Universally Unique Identifier)缩写,即通用唯一识别码,也是被开源软件基金会 (Open Software Foundation, OSF) ...
- 【Qt开发】更改应用程序图标和任务栏图标
说明 实际开发过程中,生成的应用文件不会用默认的图标,同时程序启动后任务栏的图标也需要修改,还有窗口的图标,这样显得程序不那么low.更改程序的图标有多种方式,基于Qt Creator或vs开发的方式 ...
- 转 Hibernate中cascade和inverse的作用
Inverse和cascade是Hibernate映射中最难掌握的两个属性.两者都在对象的关联操作中发挥作用.1.明确inverse和cascade的作用inverse 决定是否把对对象中集合的改动反 ...
- Jedis连接redis
今天与大家分享下,Jedis连接池使用.先看一段JAVA 代码: JedisPoolConfig config = new JedisPoolConfig(); con ...
- php过滤数组空值
如果我们想过滤数组里面的空值,例如null,,false,' '等等,可以使用php自带的一个函数,使用起来非常方便简洁: //测试数据 $data = array( '0' => '测试内容1 ...
- Bash编程(1) 基础
1. 基本知识 (1) $HOME: 当前用户的家目录 (2) `pwd`或$PWD:当前目录 (3) 脚本命名避免使用test,通过type -a test,可以查看所有匹配test的命令 gas@ ...
- 架构实战项目心得(四)(补):Maven settings.xml的所有标签详解
文章内容较长,各位看客可以根据自己需要CTRL+F 直接定位到自己需要了解的地方哦~ <?xmlversion="1.0" encoding="UTF-8" ...
- [Hadoop大数据]--kafka入门
问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行“随机读写”的原因是什么? 3.kafka集群consumer和producer状态信息是如何保存的? ...
- Error -4075: File not found. An error occurred merging module <MODULENAME> for feature <FEATURENAME>.
利用Install Shield2010制作安装包的时候一直报这样的错误,原以为是我自己安装包制作流程的问题,又重新做了2个,但是还是出现问题. 解决办法: 查找资料发现是Install Shield ...