Michael.W谈hyperledger Fabric第8期-手动搭建Fabric网络之编写用于启动网络的docker-compose配置文件-orderer节点

Michael.W谈hyperledger Fabric第8期-手动搭建Fabric网络之编写用于启动网络的docker-compose配置文件-orderer节点

3 修改orderer节点容器的配置

看一下测试用例中的orderer节点部分的配置文件是如何写的:

		services:	# 服务。 其中每个服务都对应一个docker容器。	
		  orderer.example.com:	# 第一个服务名(orderer节点),可自定义。官方给出的配置文件是用orderer节点的域名来做服务名,也可以改成其他字符串来代替。
		    extends:	# 表名该服务是继承于base/docker-compose-base.yaml文件中的orderer.example.com服务。
		      file:   base/docker-compose-base.yaml
		      service: orderer.example.com	# 继承于的服务名
		    container_name: orderer.example.com	# 自定义orderer节点容器的容器名
		    networks:	# 该容器所处的网络
		      - byfn	# 前面已声明过byfn网络

可见orderer服务继承于文件base/docker-compose-base.yaml。接着来看一下docker-compose-base.yaml中的orderer.example.com服务都做了什么配置:

	# Copyright IBM Corp. All Rights Reserved.
	#
	# SPDX-License-Identifier: Apache-2.0
	#
	
	version: '2'	# 版本号,不用修改
	
	services:	# 服务
	
	  orderer.example.com:	# docker-compose-cli.yaml中的order服务就是继承于本文件的该服务
	    container_name: orderer.example.com	# 该服务对应的容器名[1]
	    image: hyperledger/fabric-orderer:$IMAGE_TAG	# 基于的镜像。前面讲过$IMAGE_TAG可以删除掉。
	    environment:	#环境变量设置
	    	# 日志级别
	      - ORDERER_GENERAL_LOGLEVEL=INFO
	      	# orderer节点监听本机地址[4]。
	      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
	      	# 生成创始区块时的数据来源。以文件形式
	      - ORDERER_GENERAL_GENESISMETHOD=file
	      	# 生成创始区块的数据来自于哪个文件。此处跟下面的数据卷挂载有关。
	      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
	      	# 当前orderer节点属于的组织的ID。去configtx.yaml文件中找。
	      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
	      	# 当前orderer节点的证书路径(账号目录)。此处跟下面的数据卷挂载有关。
	      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
	      # enabled TLS
	      	# orderer节点通信是是否进行TLS加密
	      - ORDERER_GENERAL_TLS_ENABLED=true
	     	# 如果ORDERER_GENERAL_TLS_ENABLED为true,下面三个环境变量生效
	    	# 容器中order节点的TLS秘钥文件。此处跟下面的数据卷挂载有关。
	      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
	        # 容器中order节点的TLS证书文件。此处跟下面的数据卷挂载有关。
	      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
	        # 容器中order节点的TLS根证书文件。此处跟下面的数据卷挂载有关。这里的文件路径用中括号括了起来[5]。
	      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
	    working_dir: /opt/gopath/src/github.com/hyperledger/fabric	# 容器启动后会进入到的进程路径
	    command: orderer	# 容器启动起来默认执行的命令[2]
	    volumes: # 数据卷挂载
	    # 将创世区块文件挂载到该容器对应目录。修改时要将自己生成创世区块的文件名和路径写对![3]
	    - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
	    - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
	    # orderer节点的身份证书(账号信息)的映射
	    - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
		# 有关orderer节点的tls通信加密的文件映射
	    - orderer.example.com:/var/hyperledger/production/orderer 
	    # 一个目录映射,与docker-compose-cli.yaml文件最前面的volumes有关。先无视它,后面的帖子我会讲解。
	    ports:
	      - 7050:7050	# 端口映射:宿主机的7050端口映射到容器的7050端口。
	      # 注:orderer节点容器开放的端口默认是7050,peer节点容器默认的是7051。

[1] 如果一个服务的设置了容器名,该服务继承的服务也设置了容器名,到底该服务的容器名以哪个为准?
答:以执行顺序中最后一次设置容器名的那次操作为准。所以orderer容器名的设置要以docker-compose-cli.yaml中那次container_name的赋值为准。

[2] 这个orderer指令从何而来?
答:官方在制作镜像的时候,将orderer命令放到了该镜像中。

[3] 在做创世区块的文件挂载时,配置文件将文件映射后的文件名从genesis.block(宿主机)改成了orderer.genesis.block(容器)。但是这个并不重要,别看到文件名变了一头雾水就好。

[4] 当地址填成0.0.0.0表示系统会自动读取网卡并解析本机的IP,然后自动导入。

[5] 中括号括起来表示在中括号里面可以填多个地址

综上,环境变量的设置都是基于容器内路径的设置。成败关键在于volumes中的数据卷挂载是否正确,也就是说宿主机这边的各个路径在映射的时候千万要弄清楚!

我对orderer节点相关的配置文件修改如下:

	#	文件:docker-compose-cli.yaml
	version: '2'
	volumes:
	  orderer.michael.com:
	  peer0.org1.michael.com:
	  peer1.org1.michael.com:
	  peer0.org2.michael.com:
	  peer1.org2.michael.com:
	networks:
	  byfn:
	services:
	  orderer.michael.com:
	    extends:
	      file:   base/docker-compose-base.yaml
	      service: orderer.michael.com
	    container_name: orderer.michael.com
	    networks:
	      - byfn
	#	文件:base/docker-compose-base.yaml
	version: '2'
	services:
	  orderer.michael.com:	# 修改
	    container_name: orderer.michael.com	# 修改
	    image: hyperledger/fabric-orderer
	    environment:
	      - ORDERER_GENERAL_LOGLEVEL=INFO
	      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
	      - ORDERER_GENERAL_GENESISMETHOD=file
	      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
	      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
	      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
	      - ORDERER_GENERAL_TLS_ENABLED=true
	      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
	      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
	      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
	    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
	    command: orderer
	    volumes:
	    - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
	    # 修改
	    - ../crypto-config/ordererOrganizations/michael.com/orderers/orderer.michael.com/msp:/var/hyperledger/orderer/msp
	    # 修改
	    - ../crypto-config/ordererOrganizations/michael.com/orderers/orderer.michael.com/tls/:/var/hyperledger/orderer/tls
	    # 修改
	    - orderer.michael.com:/var/hyperledger/production/orderer
	    ports:
	      - 7050:7050

orderer节点的配置相对来说简单一些。最关键的地方还是在base/docker-compose-base.yaml文件中volumes的地方,一定要仔细再仔细!

ps:
本人热爱图灵,热爱中本聪,热爱V神,热爱一切被梨花照过的姑娘。
以下是我个人的公众号,如果有技术问题可以关注我的公众号来跟我交流。
同时我也会在这个公众号上每周更新我的原创文章,喜欢的小伙伴或者老伙计可以支持一下!
如果需要转发,麻烦注明作者。十分感谢!
后现代泼痞浪漫主义奠基人
公众号名称:后现代泼痞浪漫主义奠基人

发布了49 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/michael_wgy_/article/details/88370441
今日推荐