brunch

매거진 개발실습

You can make anything
by writing

C.S.Lewis

by SKKRYPTO May 27. 2020

도커시리즈-도커와 geth 활용 이더리움 네트워크구축

안녕하세요 skkrypto 3.5기 박유정입니다.

저번 시리즈때 도커 허브에 대해서 말씀드렸죠? 다시 말씀드리자면 도커허브는

" 본인이 생성한 image를 docker hub를 통해 다른 사람들과 공유할 수 있도록 해주는 곳" 입니다.

geth를 바로 운영체제에 설치해도 되지만 에러가 많이 날 수 있기 때문에 저희는 geth 이미지를 다운받아 이더리움 네트워크 구축을 해볼 예정입니다.


Geth 1.90 버전이 설치된 이미지 다운을 받습니다. 도 커 이미지만 도커 허브에서 다운 받으면 쉽게 구동이 가능합니다.



1. geth 환경을 다음과 같은 명령어로 도커 이미지를 다운로드 받습니다. 


$ docker pull pjt3591oo/ethereum-geth:1.90 v



2. 도커 이미지를 확인해봅니다. 보시면 하단에 ethereum-geth라는 환경이 다운로드 되어 있죠? 

$ docker images 


3. 해당 이미지를 사용하여 실습 가능한 컨테이너를 생성합니다.

p옵션? 포트 포워딩을 의미하는데 호스트 시스템으로 8545, 30303 포트 번호로 들어온 요청을 컨테이너의 8545, 30303 포트번호로 넘겨주는 역할을 합니다

p옵션으로 포트 포워딩을 하지 않으면 어떻게 될까요?? 해당 컨테이너를 제외한 모든 곳에서 접속할 수 없습니다!



$ docker run –it –name ethereum.geth.com –p 8545:8545 –p 30303:30303 pjt3591oo/Ethereum-geth:1.90 /bin/bash

위의 빨간색 박스로 친 구문을 실행시켜 주시고


다음과 같은 구문을 칩니다. 

$ mkdir node1

$ cd node1

$ geth --datadir $PWD account new



당연히 여러분들도 아시겠지만 mkdir는 폴더를 만드느것이고 cd는 해당 폴더를 들어가는 명령어겠죠??

이후 geth --datadir $PWD account new는 현재 폴더에 계정을 생성한다는 의미입니다. 


계정생성 후 비밀번호를 입력하라고 나오면, 비밀번호를 입력하고 이떄 생성된 계정이 출력되게 됩니다. 



4. 현재 폴더에 뭐가 있는지 확인해봅니다.

$ls를 입력하면 keystore이라는 파일이 나옵니다.

keystore이란? 3번에서 생성한 계정입니다. 이 파일은 비밀번호로 보호하기 때문에 개인키(private key)보다 보안측면에서 더 좋은것으로 알려져 있습니다. 비밀번호와 함께 개인키를 만들어주는 내용을 포함하고 있는 파일이죠. 이때 비밀번호를 입력해야하는데, 비밀번호와 키스토어 내용을 조합하여 개인키(private key)를 복구하는 역할을 합니다! 





5. 다음 제네시스 블록을 생성하기 위한 제네시스 파일을 만들어 봅니다. 

다음 genesis.json파일은 제네시스 블록을 만들기 위한 제네시스 파일입니다. 

여기서 중요한 점은 alloc입니다. 앞에서 우리가 생성한 계정 주소를 넣어주면 됩니다! 


genesis.json

{

  "config": {

    "chainId": 15,

    "homesteadBlock": 0,

    "eip155Block": 0,

    "eip158Block": 0

  },

  "difficulty": "20",

  "gasLimit": "2100000",

  "alloc": {

    "각자의 계정 주소 ": { "balance": "300000" }

  }

}


6.  제네시스 블록을 생성하면 datadir에 명시한 해당 노드에서 관리하는 데이터를 관리하게 됩니다. 




7. 제네시스 블록을 만들었으니 노드를 실행한 후 확인을 합니다.

하단에 그림에는 보기 힘들지만 다음과 같은 코드를 입력합니다


$cd ~/

$cd node

$ geth --datadir $PWD --networkid 1234 console 

이때 networkid를 입력 하는 이유는 프라이빗 네트워크를 실행할 때 필요한 추가적인 옵션이기 때문입니다. 

networkid는 1번부터 4번까지는 메인 네트워크와 테스트 네트워크 이기 때문에 1~4 까지는 제외하고 아무 수치나 적어주면 가능합니다. 


노드를 실행할때 console을 붙이지 않으면 이더리움 노드만 실행합니다. cnonsole을 붙여줘야지 이더리움을 조작할 수 있습니다. 




8. Welcome to the Geth JavaScript console! 

이제 > 표시가 뜨면서 실행한 노드와 명령어를 주고 받을 수 있습니다.



9. geth javascript console로 들어왔으니 하단에 언급한 명령어로 한번 연습해보세요! 







<출처>

1. 블록체인 프로젝트, 박정태 지음 

매거진의 이전글 클레이튼(Klaytn) 스마트계약과 탈중앙앱 시리즈#1
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari