반응형

Dapp이나 블록체인 기술이 요즘 핫하기 때문에, geth 라는 Go언어로 만들어진 이더리움 네트워크에서 사용할 수 있는 기능들을 제공하는 콘솔? 데몬? 프로그램? (애매함..)을 세팅해보았다.


Windows에서 잘될거란 기대는 처음부터 안했고, Background 지원 등 복잡한 부분이 많기 때문에, 처음부터 Linux환경에서 docker container를 통해 띄워보는 것으로 결정하였다.


Dockerfile을 아래와 같이 작성해주었다.

ENTRYPOINT 부분이 조금 긴데.. 옵션값들을 입맛에 맞게 수정해주면 된다. 여기서는 개발용으로 띄울 것이고 (--dev), rpc 프로토콜을 이용할 것이며(--rpc), rpcapi를 통해 이용할 기능 몇가지(--rpcapi=...)를 명시해주었고, rpcapi는 localhost 뿐만이 아닌, 외부에서도 접근이 가능하게 해주었다. (--rpcaddr=0.0.0.0)

ip를 외부로 열었지만 혹시나 모를 crossdomain이슈를 방지하기 위한 옵션과(--rpccorsdomain=*), Data경로도 변경해주었다. (--datadir) 

FROM golang:1.7

# for faster download of container, run all commands at once to create only one docker filesystem layer
RUN \
  go get github.com/ethereum/go-ethereum/cmd/geth && \
  rm -rf /go/pkg /go/src && \
  mkdir /blockchain

VOLUME /blockchain

EXPOSE 30303
EXPOSE 8545

ENTRYPOINT ["/go/bin/geth", "--dev", "--rpc", "--rpcapi=db,eth,net,web3,personal", "--rpcaddr=0.0.0.0", "--rpccorsdomain=*", "--datadir=/blockchain"]


docker-compose.yml는 아래와 같이 작성해주었다.

8545포트는 rpc api를 이용하기 위해 host 머신과 연결해주었다.

version: '2'
services:
  geth:
    build: .
    ports:
      - 8545:8545


docker를 사용해본 사람은 알겠지만, Dockerfile과 docker-compose.yml은 같은 경로에 위치해야 위 파일들이 제 역할을 하게 된다.


그리고, docker-compose up -d 를 통해 geth를 띄워준다.

$ docker-compose up -d


여기까지 rpc 통신 허용은 완료되었고, 이제 ipc 콘솔에 직접 붙어서 테스트를 해야 하는데, docker에 올렸기 때문에 당연하겠지만, 컨테이너 내부의 shell로 진입하여 작업을 해야 한다.

$ docker-compose exec geth sh
# cd /blockchain
# geth attach ipc:./geth.ipc


여기까지 진행하면, ipc 콘솔에서 이더리움 네트워크에서 제공하는 여러가지 기능들을 이용해볼 수 있게 된다.

반응형
,