這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
最近一段時間忙於工作,就沒來得及發表部落格,但一直沒有停止對區塊鏈的研究。周末抽時間分享一下近期比較重大的收穫之一——使用docker來搭建和使用以太坊的節點。本人已經順利搭建出,開發環境,測試環境,Full node環境。後續會逐個以部落格的形式分析出來,希望大家多多關注,共同探討進步。
環境
第一次嘗試是在雲端服務器的centos 6.5上面安裝。由於docker要求centos必須6以上,而且kernel 版本必須2.6.32-431或更高。嘗試將centos核心進行升級,但中間遇到一些問題,沒有順利解決,索性就將雲端服務器升級到centos 7.2版本。
如果有朋友基於centos6.5且暫時無法直接升級系統,可參考以下文章進行升級操作。
http://blog.csdn.net/taiyang1987912/article/details/42744019
安裝docker
以下環境基於centos7.2 其他環境應該差距不大,大家可自行嘗試。
安裝
如果依賴核心版本支援,直接執行一下命令,即可下載安裝docker。
yum install docker
執行以下命令,如果現實出具體版本,則安裝成功。
docker version
啟動
service docker start
查看鏡像
使用以下命令,可查看本地已經安裝的鏡像。
docker images
以上簡單介紹了docker的安裝,不同版本可能會遇到不同的問題,大家自行搜尋解決。下面將主要介紹一下docker下ethereum的安裝使用。
ethereum docker環境安裝
首選,以太坊用戶端是推薦使用docker來啟動服務的。
pull鏡像
安裝以太坊用戶端鏡像,只需執行簡單的命令即可:
docker pull ethereum/client-go
安裝完成之後,執行一下命令驗證是否安裝成功,如果能看到列表中有ethereum/client-go則表示安裝成功:
docker images
啟動節點
啟動一個節點
docker run -it -p 30303:30303 ethereum/client-go
這樣,一個節點就成功啟動了。在這個環節遇到可能會遇到一個問題。docker是不負責管理網路防火牆策略配置的,我這邊為了外網能訪問到,進行了具體的防火牆策略配置。
以下是本人在防火牆策略中針對docker的配置,僅供參考。對應策略下面添加了不同的配置項。
*nat:PREROUTING ACCEPT [27:11935]:INPUT ACCEPT [0:0]:OUTPUT ACCEPT [598:57368]:POSTROUTING ACCEPT [591:57092]:DOCKER - [0:0]-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER-A POSTROUTING -s 192.168.0.0/16 ! -o docker0 -j MASQUERADECOMMIT *filter:INPUT ACCEPT [139291:461018923]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [127386:5251162]:DOCKER - [0:0]-A FORWARD -o docker0 -j DOCKER-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT-A FORWARD -i docker0 ! -o docker0 -j ACCEPT-A FORWARD -i docker0 -o docker0 -j ACCEPTCOMMIT
上面已經正常啟動了一個節點,此節點是一個串連真實網路的全節點。如果想通過rpc介面調用對應的api,還需要在啟動參數中添加對應的配置參數:
docker run -it -p 8545:8545 -p 30303:30303 ethereum/client-go --rpc --rpcaddr "0.0.0.0"
“0.0.0.0”參數會在8545介面上接收所有主機發送的請求,公用網路慎用!
如果想使用javascript控制台進行互動操作,可使用以下命令啟動節點:
docker run -it -p 30303:30303 ethereum/client-go console
指定區塊鏈資料存放區位置
我們都知道,以太坊的區塊鏈資料已經達到幾十個G,如果磁碟不夠docker安裝的磁碟空間不夠,那不就麻煩了。本人在使用時就是重新掛載了一個磁碟來專門儲存區塊資料。通過一下命令,可在啟動的時候指定區塊資料存放區位置。
docker run -it -p 30303:30303 -v /path/on/host:/root/.ethereum ethereum/client-go
其中,-v參數是用來指定儲存路徑的。這條命令的基本作用就是將/root/.ethereum掛載到本地路徑/path/on/host下面。這樣,當容器啟動時,檔案的實際儲存的就在/path/on/host目錄下了。