如果修改了代码,需要自己构建
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。
https://hub.docker.com/r/hyperledger/burrow
docker pull hyperledger/burrow:0.30.3
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
mkdir ~/burrow && cp burrow.toml ~/burrow && cp -r .keys ~/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
docker ps|grep burrow
docker logs -f 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
注意:所有配置文件都要修改: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"
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
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
注意:这里映射到宿主机的端口+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
查看peers是否有节点信息
curl yourip:26658/consensus
curl yourip:26659/consensus
不建议使用docker搭建多节点,不如二进制来得方便,这里只是提供一种思路,后面将多节点会部署在k8s或openshift上。