# 閫氳繃Docker閮ㄧ讲閾�
浠ヨ瘉涔﹁处鎴锋ā寮忕殑閾句负渚嬶紝鍏朵粬璐︽埛妯″紡鐨勯摼锛屾祦绋嬬被浼硷紝鍙嚜琛屽€熼壌

## 浣跨敤chainmaker-go鑷甫璇佷功鍚姩docker閾�
娉細姝や负鑷缂栬瘧docker 闀滃儚绀轰緥锛岃嫢鎯充娇鐢ㄦ渶鏂板畼缃戦暅鍍忥紝璇蜂慨鏀归暅鍍忓悕绉般€俒鏌ョ湅闀滃儚](https://hub.docker.com/r/chainmakerofficial/chainmaker/tags?page=1&ordering=last_updated)
```sh
cd chainmaker-go/scripts/docker/2.3.0
# 鍚姩
./four-nodes_up.sh
# 绛夊緟10s宸﹀彸锛屽彂浜ゆ槗
cd .. && ./sendTx.sh
# 鍋滄骞跺垹闄ゆ暟鎹�
./2.3.0/four-nodes_down.sh
```

## 浣跨敤鏂扮敓鎴愮殑璇佷功鍚姩docker閾�

### 閰嶇疆璇佷功鐢熸垚鑺傜偣涓暟

- 杩涘叆`chainmaker-go/tools/chainmaker-cryptogen/config`鐩綍锛屼慨鏀筦crypto_config_template.yml`鏂囦欢涓璥count`
```
crypto_config:
  - domain: chainmaker.org
    host_name: wx-org
    count: 4                # change this what you want, example is 7 node
```

### 璇佷功鐢熸垚

- 杩涘叆chainmaker-go/scripts鐩綍锛屾墽琛宲repare.sh鑴氭湰鐢熸垚鍗曢摼4鑺傜偣闆嗙兢閰嶇疆锛屽瓨浜庤矾寰刢hainmaker-go/build涓�

```
# 杩涘叆鑴氭湰鐩綍
$ cd ../scripts
# 鏌ョ湅鑴氭湰甯姪
$ ./prepare.sh -h
Usage:  
  prepare.sh node_cnt(1/4/7/10/13/16) chain_cnt(1-4) p2p_port(default:11301) rpc_port(default:12301)
    eg1: prepare.sh 4 1
    eg2: prepare.sh 4 1 11301 12301

# 鐢熸垚鍗曢摼4鑺傜偣闆嗙兢鐨勮瘉涔﹀拰閰嶇疆
$ ./prepare.sh 4 1
begin check params...
begin generate certs, cnt: 4
input consensus type (0-SOLO,1-TBFT(default),3-HOTSTUFF,4-RAFT,5-DPOS):
input log level (DEBUG|INFO(default)|WARN|ERROR):
enable docker vm (YES|NO(default))
begin generate node1 config...
begin generate node2 config...
begin generate node3 config...
begin generate node4 config...

# 鏌ョ湅鐢熸垚濂界殑鑺傜偣璇佷功鍜岄厤缃�
$ tree -L 3 ../build/
../build/
鈹溾攢鈹€ config
鈹�   鈹溾攢鈹€ node1
鈹�   鈹�   鈹溾攢鈹€ certs
鈹�   鈹�   鈹溾攢鈹€ chainconfig
鈹�   鈹�   鈹溾攢鈹€ chainmaker.yml
鈹�   鈹�   鈹斺攢鈹€ log.yml
鈹�   鈹溾攢鈹€ node2
鈹�   鈹�   鈹溾攢鈹€ certs
鈹�   鈹�   鈹溾攢鈹€ chainconfig
鈹�   鈹�   鈹溾攢鈹€ chainmaker.yml
鈹�   鈹�   鈹斺攢鈹€ log.yml
鈹�   鈹溾攢鈹€ node3
鈹�   鈹�   鈹溾攢鈹€ certs
鈹�   鈹�   鈹溾攢鈹€ chainconfig
鈹�   鈹�   鈹溾攢鈹€ chainmaker.yml
鈹�   鈹�   鈹斺攢鈹€ log.yml
鈹�   鈹斺攢鈹€ node4
鈹�       鈹溾攢鈹€ certs
鈹�       鈹溾攢鈹€ chainconfig
鈹�       鈹溾攢鈹€ chainmaker.yml
鈹�       鈹斺攢鈹€ log.yml
鈹溾攢鈹€ crypto-config
鈹�   鈹溾攢鈹€ wx-org1.chainmaker.org
鈹�   鈹�   鈹溾攢鈹€ ca
鈹�   鈹�   鈹溾攢鈹€ node
鈹�   鈹�   鈹斺攢鈹€ user
鈹�   鈹溾攢鈹€ wx-org2.chainmaker.org
鈹�   鈹�   鈹溾攢鈹€ ca
鈹�   鈹�   鈹溾攢鈹€ node
鈹�   鈹�   鈹斺攢鈹€ user
鈹�   鈹溾攢鈹€ wx-org3.chainmaker.org
鈹�   鈹�   鈹溾攢鈹€ ca
鈹�   鈹�   鈹溾攢鈹€ node
鈹�   鈹�   鈹斺攢鈹€ user
鈹�   鈹斺攢鈹€ wx-org4.chainmaker.org
鈹�       鈹溾攢鈹€ ca
鈹�       鈹溾攢鈹€ node
鈹�       鈹斺攢鈹€ user
鈹斺攢鈹€ crypto_config.yml
```

### 闀滃儚閰嶇疆

- 杩涘叆`chainmaker-go/scripts/docker/multi_node`鐩綍锛屼慨鏀筦create_docker_compose_yml.sh`涓璉MAGE涓烘墍闇€闀滃儚

```
P2P_PORT=$1
RPC_PORT=$2
NODE_COUNT=$3
CONFIG_DIR=$4
SERVER_COUNT=$5
IMAGE="chainmakerofficial/chainmaker:v2.2.0" # change this
```

### 鍒涘缓docker-compose.yaml鏂囦欢

- 灏嗙敓鎴愮殑璇佷功閰嶇疆鏂囦欢鏀惧埌`scripts/docker/multi_node`鐩綍涓紝鐒跺悗淇敼瀵瑰簲`chainmaker.yml`鏂囦欢涓殑鏈湴ip
- 浣跨敤`create_docker_compose_yml.sh`杩涜docker-compose.yml鏂囦欢鐢熸垚

```
$ cd chainmaker-go

$ cp -rf build/config scripts/docker/multi_node/

$ cd scripts/docker/multi_node

# change ip what you want(LAN IP of the container), as 192.168.1.35 not localhost or 127.0.0.1
$ sed -i "s%127.0.0.1%192.168.1.35%g" config/node*/chainmaker.yml

# check help 
$ ./create_docker_compose_yml.sh
Usage:  
  create_yml.sh P2P_PORT RPC_PORT NODE_COUNT CONFIG_DIR SERVER_NODE_COUNT
    P2P_PORT:          peer to peer connect
    RPC_PORT:          sdk to peer connect
    NODE_COUNT:        total node count
    CONFIG_DIR:        all node config path, relative or absolute
    SERVER_NODE_COUNT: default:100, number of nodes per server

    eg: ./create_docker_compose_yml.sh 11301 12301 4 ./config : 4 nodes in 1 machine
    eg: ./create_docker_compose_yml.sh 11301 12301 16 ./config 2 : 4 nodes in 8 machine, 2 nodes per machine
    eg: ./create_docker_compose_yml.sh 11301 12301 4 /data/workspace/chainmaker-go/build/config 4

$ ./create_docker_compose_yml.sh 11331 12331 7 ./config 4

$ tree -L 1
鈹溾攢鈹€ config
鈹溾攢鈹€ create_docker_compose_yml.sh
鈹溾攢鈹€ docker-compose1.yml
鈹溾攢鈹€ readme.md
鈹溾攢鈹€ start.sh
鈹溾攢鈹€ stop.sh
鈹斺攢鈹€ tpl_docker-compose_services.yml
```
### 鍚姩鑺傜偣

```
$ cd chainmaker-go/scripts/docker/multi_node/

# 鍚姩鑺傜偣
$ docker-compose -f docker-compose1.yml up -d

# or 
$./start.sh docker-compose1.yml
```

### 鍋滄鑺傜偣

```
$ cd chainmaker-go/scripts/docker/multi_node/

# 鍋滄鑺傜偣
$ docker-compose -f docker-compose1.yml down

# or 
$./stop.sh docker-compose1.yml
```


### 鏌ョ湅鑺傜偣鏄惁瀛樺湪
- 鏌ョ湅杩涚▼
```
$ ps -ef|grep chainmaker | grep -v grep
25261  2146  4 19:55 pts/20   00:00:01 ./chainmaker start -c ../config/wx-org1.chainmaker.org/chainmaker.yml
25286  2146  4 19:55 pts/20   00:00:01 ./chainmaker start -c ../config/wx-org2.chainmaker.org/chainmaker.yml
25309  2146  4 19:55 pts/20   00:00:01 ./chainmaker start -c ../config/wx-org3.chainmaker.org/chainmaker.yml
25335  2146  4 19:55 pts/20   00:00:01 ./chainmaker start -c ../config/wx-org4.chainmaker.org/chainmaker.yml
```
- 鏌ョ湅绔彛
```
$ netstat -lptn | grep 1230
tcp6       0      0 :::12301                :::*                    LISTEN      25261/./chainmaker  
tcp6       0      0 :::12302                :::*                    LISTEN      25286/./chainmaker  
tcp6       0      0 :::12303                :::*                    LISTEN      25309/./chainmaker  
tcp6       0      0 :::12304                :::*                    LISTEN      25335/./chainmaker 
```
- 鏌ョ湅鏃ュ織
```
$ cat ../build/release/*/bin/panic.log
$ cat ../build/release/*/log/system.log
$ cat ../build/release/*/log/system.log |grep "ERROR\|put block\|all necessary"
//鑻ョ湅鍒癮ll necessary peers connected鍒欒〃绀鸿妭鐐瑰凡缁忓噯澶囧氨缁€�
```

### 閮ㄧ讲/璋冪敤鍚堢害楠岃瘉閾炬槸鍚︽甯�
鍚姩鎴愬姛鍚庯紝鍙繘琛岄儴缃�/璋冪敤绀轰緥鍚堢害锛屼互妫€鏌ラ摼鍔熻兘鏄惁姝e父銆傞儴缃插悎绾︾殑浣跨敤鏁欑▼鍙瑙侊細[閮ㄧ讲绀轰緥鍚堢害](./閮ㄧ讲绀轰緥鍚堢害.md)銆�