【超级账本】docker-compose部分介绍(四)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 目录1. docker-compose 管理容器2. fabric 相关 docker 镜像3. docker-compose-base.yaml 配置4. peer-base.yaml配置5. 环境变量5.1 客户端cli环境变量:`docker-compose-cli.yaml`5.2 排序节点`orderer`环境变量:`docker-compose-base.yaml`5.3 peer节点环境变量:`docker-compose-base.yaml`和`peer-base.yaml`6. leader节点7. docker-compose启动最后

目录

1. docker-compose 管理容器

2. fabric 相关 docker 镜像

3. docker-compose-base.yaml 配置

4. peer-base.yaml配置

5. 环境变量

5.1 客户端cli环境变量:`docker-compose-cli.yaml`

5.2 排序节点`orderer`环境变量:`docker-compose-base.yaml`

5.3 peer节点环境变量:`docker-compose-base.yaml`和`peer-base.yaml`

6. leader节点

7. docker-compose启动

最后

1. docker-compose 管理容器

节点在docker容器中运行,docker-compose管理docker容器


examples/e2e_cli/docker-compose-cli.yaml

version:# docker-compose的版本
volume:# 数据卷,指定Docker中一块持久化的区域,该区域在容器消失之后,还可以依然将区域中的数据保存下来。这部分区域不在属于某一个容器了,而是由dockercompose管理的一部分区域
networks:# 网络,所有的docker在同一个网络才能进行数据通信
services:# 服务,orderer和peer组织的节点
    orderer.example.com:                        # 服务名(排序节点和peer节点)
    extends:                                   # 继承了下面file路径下文件的一些属性
        file:base/docker-compose-base.yaml      # 不用改
        service:orderer.example.com             # 和前面的服务名保持一致
    container_name:orderer.example.com          # 容器名,和前面的服务名保持一致
    cli:客户端服务(java sdk,go sdk,shell)
        container_name:cli                      # 容器名
        image:hyperledger/fabric-tools:latest  # fabric镜像路径,可以指定tag
        tty:true                               # 启动容器的时候状态可能为:Exited (0) About a minute ago,需要设置tty为true
        stdin_open:true                        # 标准输入,true或false
        environment:                           # 环境变量相关设置
        working_dir:                           # 工作目录
        commend:                               # 启动docker后执行的命令
        volumes:                               # 数据卷
            # 挂载目录,默认就行
            - /var/run/:/host/var/run/      
            # 链码存放路径(go或者node.js写的链代码)
            - ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go
            # 存放证书的路径
            - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
             # 脚本存放路径
            - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
            # 生成的创世块和管道以及更新的锚节点文件存放的路径(tx和block后缀的文件)
            - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
            # 注意:./channel-artifacts这种是指路径,需要本地有这个路径,或者改成自己的路径
        depends_on:   # 启动顺序
          - orderer.example.com
          - peer0.org1.example.com
          - peer1.org1.example.com
          - peer0.org2.example.com
          - peer1.org2.example.com

base的路径:examples/e2e_cli/base


启动容器的数量 = depends_on的数量 + cli的数量


2. fabric 相关 docker 镜像

都在hyperleger路径下
fabric-peer:peer节点镜像
fabric-orderer:orderer节点镜像
fabric-tools:工具镜像,cryptogen等工具都在这里面
fabric-ca:ca模块镜像,可以用来生成账号
fabric-ccenv:go语言链码运行环境镜像
fabric-kafka:kafka镜像
fabric-zookeeper:zookeeper镜像
fabric-couchdb:couchdb数据库镜像

3. docker-compose-base.yaml 配置

路径:examples/e2e_cli/base/docker-compose-base.yaml
version: # 版本号
services:# 服务,有排序节点、peer节点等
    # 服务名
        continer_name:# 容器名
        image:# 镜像路径:lastst
        enviroment:# 环境
        working_dir:# 工作目录
        commend:# 启动后执行的命令
        volumens:# 挂载创世块,证书,通道的文件
            # 注意第一个路径是自己存放文件的路径,第二个对应的docker中的,不需要改,多了个本地路径和docker服务器镜像的路径
            ports:# 端口映射


4. peer-base.yaml配置

version: '2'         # 版本号
services:
  peer-base:          # 服务名,和docker-compose-base.yaml中保持一致
    image: hyperledger/fabric-peer    # 镜像,:latest
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock     # socket套接字
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2ecli_default     # 网络模式
      - CORE_LOGGING_LEVEL=DEBUG      #日志級別
      - CORE_PEER_TLS_ENABLED=true  # 是否tls加密
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      # 是否自动选举leader节点,建议设置为true,当一个leader挂掉后会自动产生leader
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start


5. 环境变量

5.1 客户端cli环境变量:docker-compose-cli.yaml


- GOPATH=/opt/gopath  # go的工作目录        
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock     # 守护进程的套接字,不用改   
- CORE_LOGGING_LEVEL=DEBUG  # 日志級別 ,critical、error、warning、notice、info、debug  
- CORE_PEER_ID=cli# peer节点的id,自己指定一个就行,就是当前客户端节点的id
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051  # 要连接的peer节点
- CORE_PEER_LOCALMSPID=Org1MSP  # peer组织id
- CORE_PEER_TLS_ENABLED=true  # 是否使用tls加密,通信的时候
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt  # tls证书文件
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key # tls私钥文件
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt  # 根证书文件
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp # 指定客户端的身份,管理员身份目录


5.2 排序节点orderer环境变量:docker-compose-base.yaml

- ORDERER_GENERAL_LOGLEVEL=debug  # 日志級別
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # 监听地址
- ORDERER_GENERAL_GENESISMETHOD=file  # 创世块来源,这里file指来源于文件
- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block # 创世块对应的文件,不是指本地的,是docker中的,base.yaml中orderer的volume关联
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP # orderer节点的id
- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp  # orderer节点的msp路径,不是指本地的,是docker中的,base.yaml中orderer的volume关联
- ORDERER_GENERAL_TLS_ENABLED=true  # enabled TLS,是否使用tls加密
- ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key  # 私钥,不是指本地的,是docker中的,base.yaml中orderer的volume关联
- ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt  # 证书,不是指本地的,是docker中的,base.yaml中orderer的volume关联
- ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] # 根证书,不是指本地的,是docker中的,base.yaml中orderer的volume关联


5.3 peer节点环境变量:docker-compose-base.yaml和peer-base.yaml


# 当前peer节点的名字,可以改 CORE_PEER_ID=peer0.org1.example.com 访问地址 
CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # chaincode 监听地址
CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052 #被组织外节点识别时的地址,以加入网络 
CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 #peer节点的组织名 CORE_PEER_LOCALMSPID=Org1MSP
CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock # socket套接字
CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2ecli_default  # 网络模式
CORE_LOGGING_LEVEL=DEBUG  # 日志級別
CORE_PEER_TLS_ENABLED=true  # 是否tls加密
CORE_PEER_GOSSIP_USELEADERELECTION=true
# 是否自动选举leader节点,建议设置为true,当一个leader挂掉后会自动产生leader
CORE_PEER_GOSSIP_ORGLEADER=false
# 当前节点是否是leader节点,建议设置为false,让自动选举产生leader即可
CORE_PEER_PROFILE_ENABLED=true   # profile服务是否开启
CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt  # 证书
CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key # 私钥
CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt # 根证书,ca证书

6. leader节点

peer节点之间通信,peer和orderer节点通信的节点叫leader,通过选举产生,只有leader才可以和orderer节点进行通信


7. docker-compose启动

启动

docker-compose -f docker-compose-cli.yaml up -d

-f:指定配置文件,默认是docker-compose.yml或docker-compose.yaml

-d:以守护进程运行


查看启动状态

docker-compose ps

docker-compose -f docker-compose-cli.yaml ps


停止

docker-compose down -v

-f 文件路径,默认文件名是docker-compose.yaml

-v 详细信息


查看所有容器

docker ps -a


删除容器

docker rm 687b66dd8e36(容器id)


查看日志

docker logs 9a1a500bf720(容器id)


相关文章
|
12天前
|
关系型数据库 MySQL API
|
26天前
|
缓存 监控 持续交付
|
8天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
8天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
19 1
|
20天前
|
负载均衡 监控 开发者
深入浅出:掌握 Docker Compose 的高级用法
【10月更文挑战第22天】本文深入探讨了 Docker Compose 的高级用法,包括环境变量、服务扩展、网络配置和数据卷管理。通过实例详细介绍了如何利用这些功能提升开发效率和应用部署的灵活性。适合希望深入了解 Docker Compose 的开发者阅读。
|
1月前
|
资源调度 关系型数据库 MySQL
docker制作compose
本文介绍了Docker Compose的基本使用,包括安装、创建`docker-compose.yml`文件定义服务,以及如何使用环境变量和卷来配置多容器应用的步骤。
54 1
docker制作compose
|
8天前
|
NoSQL Redis Docker
【赵渝强老师】使用Docker Compose管理容器
Docker Compose 通过 YAML 文件管理多个容器,简化复杂系统的部署和管理。本文介绍了 Docker Compose 的基本概念,并通过一个包含 Redis DB 和 Python Web 模块的示例,展示了如何使用 Docker Compose 部署和管理多容器应用。手动部署和 Docker Compose 部署的对比突显了 Docker Compose 在系统复杂度增加时的优势。
|
8天前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
34 0
|
1月前
|
Ubuntu Linux 网络安全
Docker&Docker Compose安装(离线+在线)
Docker&Docker Compose安装(离线+在线)
201 1
|
1月前
|
存储 Kubernetes 持续交付
Docker Compose
【10月更文挑战第3天】
46 6