2018/1/22 10:13:48

安装docker

更新源

$sudo apt-get update

开发环境中推荐可使用脚本自动安装,能快速安装:

$curl -fsSL get.docker.com -o get-docker.sh
$sudo sh get-docker.sh --mirror Aliyun

将当前用户添加到Docker组中

sudo usermod -aG docker username

修改Docker服务配置(/etc/default/docker文件)

sudo vi /etc/default/docker

添加

DOCKER_OPTS="$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --api-cors-header='*'"

镜像加速(因为国外的镜像下载比较慢),在https://www.daocloud.io/mirror注册后,在用户信息旁边有镜像下有镜像加速脚本。以下是我的镜像加速脚本:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://xxxxxxx.m.daocloud.io

重启一下服务:

sudo systemctl restart docker.service

使用docker时要使用sudo,可以通过一下步骤实现不加sudo使用docker命令:
1. 添加一个docker 组:sudo groupadd docker
2. 将当前用户加入组中: sudo gpasswd -a ${USER} docker
3. 重启docker: sudo service docker restart

安装docker-compose

查看当前是否已经安装docker-compose

$docker-compose --version

用pip安装
这种方式是将Compose当作一个Python应用来从pip源中安装。
执行安装命令:

$sudo pip install -U docker-compose

bash补全命令

$ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/ba
sh/docker-compose > /etc/bash_completion.d/docker-compose

容器中执行
Compose既然是一个python应用,就可以直接用容器来执行。
以下是将docker-compose设成是一个命令:

$ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local
/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

查看下载的run.sh脚本内容,如下:

set -e
VERSION="1.8.0"
IMAGE="docker/compose:$VERSION"
# Setup options for connecting to docker host
if [ -z "$DOCKER_HOST" ]; then
DOCKER_HOST="/var/run/docker.sock"
fi
if [ -S "$DOCKER_HOST" ]; then
DOCKER_ADDR="-v $DOCKER_HOST:$DOCKER_HOST -e DOCKER_HOST"
else
DOCKER_ADDR="-e DOCKER_HOST -e DOCKER_TLS_VERIFY -e DOCKER_CERT_PATH"
fi
# Setup volume mounts for compose config and context
if [ "$(pwd)" != '/' ]; then
VOLUMES="-v $(pwd):$(pwd)"
fi
if [ -n "$COMPOSE_FILE" ]; then
compose_dir=$(dirname $COMPOSE_FILE)
fi
# TODO: also check --file argument
if [ -n "$compose_dir" ]; then
VOLUMES="$VOLUMES -v $compose_dir:$compose_dir"
fi
if [ -n "$HOME" ]; then
VOLUMES="$VOLUMES -v $HOME:$HOME -v $HOME:/root" # mount $HOME in /root to share d
ocker.config
fi
# Only allocate tty if we detect one
if [ -t 1 ]; then
DOCKER_RUN_OPTIONS="-t"
fi
if [ -t 0 ]; then
DOCKER_RUN_OPTIONS="$DOCKER_RUN_OPTIONS -i"
fi
exec docker run --rm $DOCKER_RUN_OPTIONS $DOCKER_ADDR $COMPOSE_OPTIONS $VOLUMES -w "$(
pwd)" $IMAGE

安装部署hyperledger

感谢yeasy大神提供的模板

首先下载compose文件

$git clone https:github.com/yeasy/docker-compose-files

进入hyperledger

cd docker-compose-files/hyperledger_fabric/v1.0.5

生成 crypto-configchannel-artifacts

$make gen_config

这个命令实际上是调用了scripts/gen_config.sh来生成crypto-configchannel-artifacts
详情看Config Generation

启动 Fabric Network
启动四个节点(属于两个组织)的fabric network

$make start

这个脚本实际是时用docker-compose去启动具有几个容器的网络结构
有6个容器运行,包括4个peer,1 个cli 和 1个orderer

$ make ps
CONTAINER IDIMAGE COMMAND  CREATED STATUS  PORTSNAMES
f6686986fe18hyperledger/fabric-tools:x86_64-1.0.4 "bash -c 'cd /tmp;..."   6 seconds ago   Up 14 secondsfabric-cli
c7f274bf60bcyeasy/hyperledger-fabric-peer:1.0.4   "peer node start"6 seconds ago   Up 11 seconds   7050/tcp, 7054-7059/tcp, 0.0.0.0:10051->7051/tcp, 0.0.0.0:10052->7052/tcp, 0.0.0.0:10053->7053/tcp   peer1.org2.example.com
c6c5f69f2d53yeasy/hyperledger-fabric-peer:1.0.4   "peer node start"6 seconds ago   Up 12 seconds   7050/tcp, 7054-7059/tcp, 0.0.0.0:8051->7051/tcp, 0.0.0.0:8052->7052/tcp, 0.0.0.0:8053->7053/tcp  peer1.org1.example.com
3cad0c519e6fyeasy/hyperledger-fabric-peer:1.0.4   "peer node start"6 seconds ago   Up 13 seconds   7050/tcp, 7054-7059/tcp, 0.0.0.0:7051-7053->7051-7053/tcppeer0.org1.example.com
8b371209f6b8yeasy/hyperledger-fabric-peer:1.0.4   "peer node start"6 seconds ago   Up 11 seconds   7050/tcp, 7054-7059/tcp, 0.0.0.0:9051->7051/tcp, 0.0.0.0:9052->7052/tcp, 0.0.0.0:9053->7053/tcp  peer0.org2.example.com
ba1f00a9c83chyperledger/fabric-orderer:x86_64-1.0.4   "orderer start"  6 seconds ago   Up 14 seconds   0.0.0.0:7050->7050/tcp   orderer.example.com

创建应用通道(Application Channel)

$make test_channel_create

这个命令实际上用fabric-cli容器来调用scripts/test_channel_create.sh脚本来创建新的应用通道,通道名默认为bussinesschannel

将节点加入应用通道

$make test_channel_join

这个命令实际上是用fabric-cli容器来调用scripts/test_channel_join.sh,将所有节点加进通道里。
向所有节点安装Chaincode

$make test_cc_install

实例化

$ make test_cc_instantiate

这个命令实际上是用fabric-cli容器来调用scripts/test_cc_instantiate.sh来实例化chaincode example02

这个命令将会在系统里产生新的chaincode容器

$ make ps
CONTAINER IDIMAGE COMMAND  CREATED  STATUS  PORTSNAMES
9971c9fd1971dev-peer1.org2.example.com-mycc-1.0   "chaincode -peer.a..."   54 seconds ago   Up 53 secondsdev-peer1.org2.example.com-mycc-1.0
e3092961b81bdev-peer1.org1.example.com-mycc-1.0   "chaincode -peer.a..."   About a minute ago   Up About a minutedev-peer1.org1.example.com-mycc-1.0
57d3555f56e5dev-peer0.org2.example.com-mycc-1.0   "chaincode -peer.a..."   About a minute ago   Up About a minutedev-peer0.org2.example.com-mycc-1.0
c9974dbc21d9dev-peer0.org1.example.com-mycc-1.0   "chaincode -peer.a..."   23 minutes ago   Up 23 minutes 

测试 Chaincode

$make test_cc_invoke_query

这个命令实际上是用fabric-cli容器来调用scripts/test_cc_invoke_query脚本来测试chaincodeexample02的调用和查询

测试系统的Chaincode

$make test_lscc #test LSCC
$make test_qscc #test QSCC

这个命令实际上是用fabric-cli容器来调用scripts/test_lscc.shscripts/test_qscc.sh脚本来测试LSCC 和QSCC.

测试获取区块

$ make test_fetch_blocks # test fetch blocks

这个命令实际上是用fabric-cli容器来调用scripts/test_fetch_blocks.sh脚本来测试从应用通道中获取区块。

测试修改通道

$make test_configtxlator

这个命令实际上是用fabric-cli容器来调用scripts/test_fetch_blocks.sh脚本来测试 configtxlator来更改 channel配置。

更多细节

停止网络

$ make stop # stop the fabric network

清理环境(清理相关的容器和镜像)

$make clean

[*] 转载请注明来源,谢谢!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐