最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
除了手动进行本地编译外,还可以采用容器(Docker)镜像的方式快速获取和运行 Fabric 网络,节约本地编译等待的时间。
Docker 支持 Linux 常见的发行版(如 Redhat/Centos/Ubuntu)和 MacOS 等,推荐使用 1.18 或者更新的版本。
Linux 操作系统下可以通过如下命令来快速安装 Docker:
Ubuntu 18.04 中默认采用了 systemd 管理启动服务,配置文件在 /lib/systemd/system/docker.service
。
对服务配置修改后,需要通过如下命令重启 Docker 服务:
对于使用 upstart 管理启动服务的操作系统(如旧版本的 Ubuntu、Debian),则可以采用如下命令重启 Docker 服务:
MacOS 下可以通过访问 https://docs.docker.com/docker-for-mac/install 下载 Docker for Mac 安装包进行安装,在此不再赘述。
docker-compose 是 Docker 官方推出的服务模板引擎,可以快速管理由多个 Docker 容器组成的服务。
首先,安装 python-pip 软件包:
安装 docker-compose(推荐为 1.10.0 及以上版本):
Docker 镜像可以自行从源码编译,或通过从 DockerHub 仓库下载等方式。
目前,Fabric 项目相关的 Docker 镜像有十几个,这些镜像都在 hyperledger
仓库中,它们之间的相互依赖关系如下图所示。
从用途上,可以可以大致分为三类:核心镜像、辅助镜像和第三方镜像。
提供 Fabric 网络运行的核心功能,目前包括 fabric-peer、fabric-orderer、fabric-ca、fabric-baseos、fabric-ccenv、fabric-javaenv、fabric-nodeenv 共 7 种镜像。如下表所示。
提供支持功能,目前包括 fabric-baseimage、fabric-tools 镜像。如下表所示。
主要是一些第三方开源软件,提供支持功能,目前包括 coudhdb、kafka、zookeeper 共 3 种镜像。如下表所示。
可以通过如下命令在本地快速生成包括 fabric-baseos、fabric-peer、fabric-orderer、fabric-ccenv、fabric-tools 等多个 Docker 镜像:
注意,从源码直接生成的镜像,除了版本标签外,还会带有所编译版本快照信息的标签,例如 amd64-2.0.0-snapshot123456
。
除了从源码编译外,还可以直接从 Dockerhub 来拉取相关的镜像,命令格式为 docker pull <IMAGE_NAME:TAG>
。
例如,从社区仓库直接获取 fabric-peer、fabric-orderer、fabric-ca、fabric-tools 等镜像的 2.0.0 版本可以使用如下命令:
此外,还可以从第三方仓库获取镜像,拉取后可以添加默认的镜像标签别名。
例如,笔者仓库中构建了基于 Golang 基础镜像的相关 fabric 镜像,可以通过如下命令获取:
注:BASEIMAGE_RELEASE 是基础镜像 fabric-baseimage 的版本号;PROJECT_VERSION 是具体版本号。这些版本号需要跟所使用的 Fabric 配置中保持一致。
读者也可自行通过编写 Dockefile 的方式来生成相关镜像。
Dockerfile 中指令跟本地编译过程十分类似,这里给出笔者编写的 fabric-base 镜像、fabric-orderer 镜像和 fabric-peer 镜像等关键镜像的 Dockerfile,供读者参考使用。
笔者提供的 fabric-base 镜像基于 golang:1.13 镜像生成,可以作为 Go 链码容器的基础镜像。该镜像中包含了 Fabric 相关的代码,并安装了一些有用的工具,包括 gotools、 configtxgen、configtxlator、cryptogen、discover、token、idemixgen 等。
该 Dockerfile 内容如下,也可从 https://github.com/yeasy/docker-hyperledger-fabric-base 下载获取:
该镜像也可以用作替代 hyperledger/fabric-baseimage:latest
镜像。
fabric-orderer 镜像基于 fabric-base 生成,编译安装了 orderer 组件。
参考 Dockerfile 内容如下,可从 https://github.com/yeasy/docker-hyperledger-fabric-orderer 下载获取:
fabric-peer 镜像基于 fabric-base 生成,编译安装了 peer 命令。
Dockerfile 内容如下,可从 https://github.com/yeasy/docker-hyperledger-fabric-peer 下载获取:
fabric-ca 镜像基于 golang:1.13 镜像生成,提供对证书的签发功能。
Dockerfile 内容如下,可从 https://github.com/yeasy/docker-hyperledger-fabric-ca 下载获取。
fabric-peer
alpine:3.10
peer 节点镜像,安装了 peer 相关文件。生成过程使用 golang:1.13.4-alpine3.10 镜像。
fabric-orderer
alpine:3.10
orderer 节点镜像,安装了 orderer 相关文件。生成过程使用 golang:1.13.4-alpine3.10 镜像。
fabric-ca
alpine:3.10
fabric-ca 镜像,安装了 fabric-ca 相关文件。生成过程使用 golang:1.13.4-alpine 镜像。
fabric-baseos
alpine:3.10
基础镜像,用来生成其它镜像(包括 Peer、Orderer、fabric-ca),并作为 Go 链码的默认运行时镜像。
fabric-ccenv
golang:1.13.4-alpine3.10
支持 Go 语言的链码基础镜像,其中安装了 g++、gcc、git、musl-dev 等,并创建 chaincode 存放目录。在链码实例化过程中作为默认编译环境将链码编译为二进制文件。
fabric-javaenv
adoptopenjdk/openjdk11:jdk-11.0.4_11-alpine
支持 Java 语言的链码基础镜像,其中安装了 Gradle、Maven、Java 链码 shim 层等,作为 Java 链码的默认运行时镜像。
fabric-nodeenv
node:12.13.0-alpine
支持 Node.Js 语言的链码基础镜像,其中安装了 make、python、g++。在链码实例化过程中作为默认编译环境生成 Node.Js 链码镜像,同时作为 Node.Js 链码运行环境。
fabric-baseimage
adoptopenjdk:8u222-b10-jdk-openj9-0.15.1
基础镜像,安装了 wget、Golang、Node.JS、Python、Protocol buffer 支持等,用来生成其它镜像。作为运行时可以用来生成 Node.Js 链码镜像。
fabric-tools
golang:1.13.4-alpine
安装了 bash、jq、peer、cryptogen、configtxgen 等常见命令,可以作为测试客户端使用。
fabric-couchdb
debian:stretch-20190910-slim
couchdb 镜像,可以启动 couchdb 服务,供 peer 使用。
fabric-kafka
adoptopenjdk:8u222-b10-jre-openj9-0.15.1
kafka 镜像,可以启动 kafka 服务,供 orderer 在 kafka 模式下使用。已经不再支持。
fabric-zookeeper
adoptopenjdk:8u222-b10-jre-openj9-0.15.1
zookeeper 镜像,可以启动 zookeeper 服务,供 orderer 在 kafka 模式下使用。已经不再支持。