2018/1/22 10:13:48
安装docker
更新源
$sudo apt-get update
- 1
- 2
开发环境中推荐可使用脚本自动安装,能快速安装:
$curl -fsSL get.docker.com -o get-docker.sh
$sudo sh get-docker.sh --mirror Aliyun
- 1
- 2
- 3
将当前用户添加到Docker组中
sudo usermod -aG docker username
- 1
- 2
修改Docker服务配置(/etc/default/docker
文件)
sudo vi /etc/default/docker
- 1
- 2
添加
DOCKER_OPTS="$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --api-cors-header='*'"
- 1
- 2
镜像加速(因为国外的镜像下载比较慢),在https://www.daocloud.io/mirror注册后,在用户信息旁边有镜像下有镜像加速脚本。以下是我的镜像加速脚本:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://xxxxxxx.m.daocloud.io
- 1
- 2
重启一下服务:
sudo systemctl restart docker.service
- 1
- 2
使用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
- 1
- 2
用pip安装
这种方式是将Compose当作一个Python应用来从pip源中安装。
执行安装命令:
$sudo pip install -U docker-compose
- 1
- 2
bash补全命令
$ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/ba
sh/docker-compose > /etc/bash_completion.d/docker-compose
- 1
- 2
- 3
容器中执行
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
- 1
- 2
- 3
- 4
查看下载的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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
安装部署hyperledger
感谢yeasy大神提供的模板
首先下载compose文件
$git clone https:github.com/yeasy/docker-compose-files
- 1
- 2
进入hyperledger
cd docker-compose-files/hyperledger_fabric/v1.0.5
- 1
- 2
生成 crypto-config
和 channel-artifacts
$make gen_config
- 1
- 2
这个命令实际上是调用了scripts/gen_config.sh
来生成crypto-config
和 channel-artifacts
详情看Config Generation
启动 Fabric Network
启动四个节点(属于两个组织)的fabric network
$make start
- 1
- 2
这个脚本实际是时用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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
创建应用通道(Application Channel)
$make test_channel_create
- 1
- 2
这个命令实际上用fabric-cli
容器来调用scripts/test_channel_create.sh
脚本来创建新的应用通道,通道名默认为bussinesschannel
将节点加入应用通道
$make test_channel_join
- 1
- 2
这个命令实际上是用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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
测试 Chaincode
$make test_cc_invoke_query
- 1
- 2
这个命令实际上是用fabric-cli
容器来调用scripts/test_cc_invoke_query
脚本来测试chaincodeexample02
的调用和查询
测试系统的Chaincode
$make test_lscc #test LSCC
$make test_qscc #test QSCC
- 1
- 2
- 3
这个命令实际上是用fabric-cli
容器来调用scripts/test_lscc.sh
和 scripts/test_qscc.sh
脚本来测试LSCC 和QSCC.
测试获取区块
$ make test_fetch_blocks # test fetch blocks
- 1
- 2
这个命令实际上是用fabric-cli
容器来调用scripts/test_fetch_blocks.sh
脚本来测试从应用通道中获取区块。
测试修改通道
$make test_configtxlator
- 1
- 2
这个命令实际上是用fabric-cli
容器来调用scripts/test_fetch_blocks.sh
脚本来测试 configtxlator来更改 channel
配置。
更多细节
停止网络
$ make stop # stop the fabric network
- 1
- 2
清理环境(清理相关的容器和镜像)
$make clean
- 1
- 2
[*] 转载请注明来源,谢谢!