使用docker部署Hyperledger burrow

環境

  • os:centos7.6
  • docker-ce 19.03.5

1. 獲取鏡像

1.1 方式一:根據源碼構建

如果修改了代碼,需要自己構建

git clone https://github.com/hyperledger/burrow.git
cd burrow
git checkout v0.30.2
make docker_build

查看已構建的鏡像

docker images|grep burrow
hyperledger/burrow     0.30.2    b7c5643e3e31     26 seconds ago  54.4MB

Dockerfile

# For solc binary
FROM ethereum/solc:0.5.12 as solc-builder
# We use a multistage build to avoid bloating our deployment image with build dependencies
FROM golang:1.13-alpine3.11 as builder

RUN apk add --no-cache --update git bash make

ARG REPO=/src/burrow
COPY . $REPO
WORKDIR $REPO

# Build purely static binaries
RUN make build

# This will be our base container image
FROM alpine:3.11

# Variable arguments to populate labels
ARG USER=burrow
ARG INSTALL_BASE=/usr/local/bin

# Fixed labels according to container label-schema
LABEL org.label-schema.schema-version="1.0"
LABEL org.label-schema.name = "Burrow"
LABEL org.label-schema.vendor="Hyperledger Burrow Authors"
LABEL org.label-schema.description="Hyperledger Burrow is a permissioned Ethereum smart-contract blockchain node."
LABEL org.label-schema.license="Apache-2.0"
LABEL org.label-schema.vcs-url="https://github.com/hyperledger/burrow"

# Run burrow as burrow user; not as root user
ENV BURROW_PATH /home/$USER
RUN addgroup -g 101 -S $USER && adduser -S -D -u 1000 $USER $USER
WORKDIR $BURROW_PATH

# Copy binaries built in previous stage
COPY --from=builder /src/burrow/bin/burrow $INSTALL_BASE/
COPY --from=solc-builder /usr/bin/solc $INSTALL_BASE/

# Expose ports for 26656:peer; 26658:info; 10997:grpc
EXPOSE 26656
EXPOSE 26658
EXPOSE 10997

USER $USER:$USER
ENTRYPOINT [ "burrow" ]

使用了多階段構建,從ethereum/solc:0.5.12拷貝了solc命令,在golang:1.13-alpine3.11裏構建出burrow程序,最後在alpine:3.11中運行,工作目錄在/home/burrow。

1.2 方式二:從docker hub拉取

https://hub.docker.com/r/hyperledger/burrow

docker pull hyperledger/burrow:0.30.3

2. 部署burrow單節點

2.1 生成burrow配置(burrow.toml和.key目錄)

docker run  --rm hyperledger/burrow:0.30.3 spec -p1 -f1 \
 | docker run  --rm -v $(pwd)/.keys:/home/burrow/.keys hyperledger/burrow:0.30.3  configure -s- >burrow.toml

2.2 創建數據目錄,並拷貝配置文件和私鑰

mkdir  ~/burrow && cp burrow.toml ~/burrow && cp -r .keys ~/burrow

2.3 啓動burrow容器

docker rm burrow
docker run --name burrow -d -e BURROW_CONFIG_FILE=/home/burrow/burrow.toml -v ~/burrow:/home/burrow -p 26656:26656 -p 26658:26658 -p 10997:10997 hyperledger/burrow:0.30.3 start -v0 

2.4 查看容器是否啓動

docker ps|grep burrow

2.5 查看日誌

docker logs -f burrow

3. 部署burrow多節點

3.1生成burrow配置

需要幾個節點就將-f2 修改爲-f幾,這裏搭建兩個節點,注意不能像單節點那樣使用管道命令(使用管道只能生成一個配置,原因不明),這裏分兩步先生成創世配置genesis-spec,再生成burrow配置文件。

docker run  --rm hyperledger/burrow:0.30.3 spec -f2 >genesis-spec.json

docker run  --rm -v $(pwd)/:/home/burrow hyperledger/burrow:0.30.3 configure --genesis-spec=genesis-spec.json --pool 

3.2 修改配置文件

注意:所有配置文件都要修改:burrow000.toml、burrow001.toml

增加控制檯輸出

[Logging]
  Trace = false
  NonBlocking = false
  [Logging.RootSink]
    [Logging.RootSink.Output]
      OutputType = "file"
      Format = "json"
      Path = "burrow000.log"
  [[Logging.RootSink.Sinks]]
    [Logging.RootSink.Sinks.Output]
      OutputType = "stdout"
      Format = "terminal"

修改PersistentPeers地址,將127.0.0.1修改爲宿主機ip,端口都改爲26656

[Tendermint]
  PersistentPeers = "tcp://3fc44d83eaa1a0f526680062765ccdb19754ae9e@yourip:26656,tcp://62a04fd2c943439c9981c820bc004d463125e344@yourip:26656"

將監聽地址修改爲"0.0.0.0",監聽端口還原。容器端口可以保持固定,我們可以映射到宿主機的任何端口。
Tendermint(peer):26656

[Tendermint]
  ListenPort = "26656"
  ListenHost = "0.0.0.0"

info:26658,GRPC:10997 ,Web3:2660

[RPC]
  [RPC.Info]
    Enabled = true
    ListenHost = "0.0.0.0"
    ListenPort = "26658"
  [RPC.GRPC]
    Enabled = true
    ListenHost = "0.0.0.0"
    ListenPort = "10997"
  [RPC.Web3]
    Enabled = true
    ListenHost = "0.0.0.0"
    ListenPort = "26660"

3.3 創建數據目錄,並拷貝配置文件、私鑰、節點配置

mkdir  ~/burrow000 && cp burrow000.toml ~/burrow000 && cp -r .keys ~/burrow000 && cp -r .burrow000 ~/burrow000
mkdir  ~/burrow001 && cp burrow001.toml ~/burrow001 && cp -r .keys ~/burrow001 && cp -r .burrow001 ~/burrow001

3.4 啓動第一個容器

docker rm -f burrow000
docker run --name burrow000 -d -e BURROW_CONFIG_FILE=/home/burrow/burrow000.toml -v ~/burrow000:/home/burrow -p 26656:26656 -p 26658:26658 -p 26660:26660 -p 10997:10997 hyperledger/burrow:0.30.3 start -v0 

3.5 啓動第二個容器

注意:這裏映射到宿主機的端口+1了,因爲已經被第一個節點佔用了,如果部署在不同的宿主機就不用修改了

docker rm -f burrow001
docker run --name burrow001 -d -e BURROW_CONFIG_FILE=/home/burrow/burrow001.toml -v ~/burrow001:/home/burrow -p 26657:26656 -p 26659:26658 -p 26661:26660 -p 10998:10997 hyperledger/burrow:0.30.3 start -v1 

3.6 檢查兩個節點是否連接

查看peers是否有節點信息

curl yourip:26658/consensus
curl yourip:26659/consensus

3.7 總結

不建議使用docker搭建多節點,不如二進制來得方便,這裏只是提供一種思路,後面將多節點會部署在k8s或openshift上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章