# Docker로 서비스체인 구동

**URL:** https://devforum.kaia.io/t/docker/558
**Category:** Kaia
**Tags:** klaytn
**Created:** [12월 18, 2020, 4:54오전 UTC](https://devforum.kaia.io/t/docker/558 "2020-12-18T04:54:15Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![HARDICE](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/hardice/32/345_2.png) [@HARDICE](https://devforum.kaia.io/u/HARDICE)
#### Post date: [12월 18, 2020, 4:54오전 UTC](https://devforum.kaia.io/t/docker/558/1 "2020-12-18T04:54:15Z")

</div>

docker로 4개의 서버를 구성해 서비스체인을 구동하려고 합니다.  
homi 옵션중 docker 옵션이 default로 있어서 실행을 해봤는데, doc에 있는것과 달리  
static-nodes.json, nodekey, validator 파일이 생성되지 않았습니다. 대신, docker-compose.yml파일이 생성되길래 확인해보니 CN-0~CN-3까지 총 4개의 ipaddress와 port가 나왔습니다.

다시 homi setup local 옵션으로 실행한 다음 docker-compose 파일의 내용에 맞춰서  
static-nodes.json 파일을 구성해봤는데 서버가 실행하자마자 down이 됩니다.  
제가 세팅한 방법은 docker-compose에 있는 4개의 ip를 각각 static-node.json 파일의 ip에 해당하는 부분에 기입했고  
port 의 경우  
ports:  
- ‘32324:32323’  
에서 앞부분의 port를 기입했습니다.  
ex) kni://dfbf405a686e0eb5bc27d23856113dde98e1802df21fbdc66f23348c6b9ed48d865a828a70c9c5a30c7bf28c221e4fdba20675a96006c0fdb12e8fae28bb83fa@172.16.239.10:32324?discport=0\u0026ntype=cn

kscn 폴더 내부의 conf/kscnd.conf도  
port 부분을 앞부분의 port(32324)를 기입했습니다.

---

<div class="post-metadata">

### Author: ![Ethan](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/ethan/32/18_2.png) [@Ethan](https://devforum.kaia.io/u/Ethan)
#### Post date: [12월 18, 2020, 8:57오전 UTC](https://devforum.kaia.io/t/docker/558/2 "2020-12-18T08:57:36Z")

</div>

안녕하세요. 서비스체인 관련해서 문의주셔서 감사합니다.

말씀 하신데로 `homi setup`을 통해서 아래와 같이 3가지 방식으로 띄울수 있습니다.  
참고로 항상 homi setup을 하면 그때그때 랜덤하게 nodekey를 생성하고 static-nodes.json, genesis 파일에 반영하기 때문에 이 들의 조합이 맞지 않으면 동작이 되지 않습니다.

- docker 방식 : docker-compose.yml 파일 생성
- local 방식 : nodekey와 static-nodes.json(local에서 사용가능하도록 다른 포트로 설정) 파일 생성
- remote 방식 : nodekey와 static-nodes.json(포트가 동일) 파일 생성

**Docker 방식**  
먼저 docker 방식을 살펴보겠습니다. 따로 Docs가 없지만 먼저 설명을 드리고 향후 Docs에 보충하도록 하겠습니다.

- 이 경우에는 따로 nodekey/genesis/static-nodes.json파일을 생성하지 않고 docker-compose.yml파일안에 넣어주고 있으며 `nodekeyhex` 에 nodekey정보가 있으며 이걸로 test KLAY를 사용가능 합니다.
- homi 기본 docker image ID 변경이 필요합니다 아래 내용을 살펴봐주십시요.

```auto
➜ homi setup --scn-num 4 --test-num 1 --servicechain --p2p-port 30000 -o docker-4scn-default
Created : docker-4scn-default/docker-compose.yml
Created : docker-4scn-default/prometheus.yml
Created : docker-4scn-default/Klaytn.json
Created : docker-4scn-default/Klaytn_txpool.json
➜ cd docker-4scn-default
➜ sed -i '' 's/klaytn-base/klaytn\/klaytn/g' docker-compose.yml # 현재는 homi에서 기본으로 되는 docker-image ID를 public한 klaytn docker id로 변경이 필요합니다. (향후에 homi에 반영토록 하겠습니다.)
➜ docker-4scn-default docker-compose up
Creating network "docker-4scn-default_app_net" with driver "bridge"
Creating docker-4scn-default_SCN-3_1 ... done
Creating docker-4scn-default_prometheus_1 ... done
Creating docker-4scn-default_SCN-0_1 ... done
Creating docker-4scn-default_SCN-2_1 ... done
Creating docker-4scn-default_grafana_1 ... done
Creating docker-4scn-default_SCN-1_1 ... done
Attaching to docker-4scn-default_prometheus_1, docker-4scn-default_SCN-0_1, docker-4scn-default_grafana_1, docker-4scn-default_SCN-2_1, docker-4scn-default_SCN-3_1, docker-4scn-default_SCN-1_1
SCN-0_1 | WARN[12/18,08:41:02 Z] [19] Some input value of genesis.json have been set to default or changed
SCN-0_1 | INFO[12/18,08:41:02 Z] [18] Setting connection type nodetype=cn conntype=0
SCN-0_1 | INFO[12/18,08:41:02 Z] [18] Cypress bootnodes are set
SCN-0_1 | INFO[12/18,08:41:02 Z] [18] Setting MaxPhysicalConnections MaxPhysicalConnections=10
SCN-0_1 | INFO[12/18,08:41:02 Z] [18] Cypress network ID is set networkid=8217
SCN-0_1 | INFO[12/18,08:41:02 Z] [18] Cypress network ID is set networkid=8217
SCN-0_1 | INFO[12/18,08:41:02 Z] [18] Archiving mode of this node isArchiveMode=false
SCN-0_1 | INFO[12/18,08:41:02 Z] [46] Non-single database is used for persistent storage DBType=LevelDB
SCN-0_1 | INFO[12/18,08:41:02 Z] [46] LevelDB configurations path=/klaytn/klay/chaindata...

```

위와 같이 노드를 띄운이후에는 아래와 같이 RPC 로 접속이 가능합니다.  
현재는 4개 노드를 각각 8551,2,3,4로 할당하여 각 노드를 접속 가능합니다.

```auto
➜ ksen attach http://localhost:8551
Welcome to the Klaytn JavaScript console!

instance: Klaytn/"SCN-0"/v1.5.3/linux-amd64/go1.14.6
 datadir: /klaytn
 modules: admin:1.0 debug:1.0 istanbul:1.0 klay:1.0 net:1.0 personal:1.0 rpc:1.0 subbridge:1.0 txpool:1.0 web3:1.0

> net.peerCount
3
> klay.blockNumber
77
> personal.importRawKey("6a579fa47a64d2b5a1985c0a52fdea064174db26af7d4709dfaad4e2f169227e", "test") # docker-composer.yml 파일에서 얻은 nodekey정보로 account를 생성
"0xeff305a89df7ae7ba735a2f6f76a4940ac923280" # 주소확인
> klay.getBalance("0xeff305a89df7ae7ba735a2f6f76a4940ac923280") # balance 확인
1e+50

```

**Local/Remote 방식**  
local과 remote 방식의 경우는 아래 link docs를 참고 부탁드립니다.

> **[Setting up a 4-node Service Chain](https://docs.klaytn.com/node/service-chain/getting-started/4nodes-setup-guide)**

local의 경우는 한 PC에서 4대를 띄우는 것이기 때문에 static-nodes.json 파일에 port가 다 다르게 나오게 됩니다.  
그러므로 각 노드별 `conf/kscnd.conf`에서 PORT값을 각각 static-nodes.json파일처럼 설정이 필요합니다.  
nodekey로 부터 static-node.json의 kni 주소가 나오는 것이니 순서를 잘 맞춰 주셔야 합니다.

remote의 경우 각 노드별 ip와 nodekey의 순서만 잘 맞춰 주시면 됩니다.

진행하시다가 추가적으로 문의가 있으시면 언제든지 문의부탁드립니다.  
부족한 Docs 부분은 채워 나가도록 하겠습니다.

감사합니다.
