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 콘솔에서 이더리움 네트워크에서 제공하는 여러가지 기능들을 이용해볼 수 있게 된다.