(轉)EOSIO開發(一)使用Docker構建本地環境

前言

一直想學習EOS開發,可是不知道怎麼入門。最近從GitHub上下載了源碼,發現官方已經提供了完整的EOSIO開發入門教程,既然如此趕忙開始行動。今天是系列文章的第一篇,介紹如何使用Docker搭建本地環境。html

選擇構建方式

官方支持兩種方式搭建本地環境node

  • 使用源碼
  • 使用Docker

我我的首選Docker,由於能夠將與EOSIO相關的軟件、環境都封裝在一個鏡像中,不論是出了問題要回退,仍是學完之後刪除相關的軟件,Docker都很方便。git

因此在這篇文章中我就不介紹怎麼使用源碼構建了,有興趣的同窗能夠參考官方文檔的Building EOSIO章節。github

前期準備

EOSIO的構成

在正式開始構建以前,咱們先來了解EOSIO的組成部分,官方文檔對於EOSIO是這麼介紹的。docker

EOSIO comes with a number of programs(EOSIO由下面的程序構成):json

  • nodeos - server-side blockchain node component(服務端的區塊鏈節點組件)
  • cleos - command line interface to interact with the blockchain(與區塊鏈進行交互的命令行界面)
  • keosd - EOSIO wallet(EOSIO錢包)
  • eosio-launcher - application to assist with deploying a multi-node blockchain network(用來協助部署一個多節點區塊鏈網絡的應用程序)

中文是我本身翻譯的,請原諒個人學渣翻譯水平,因爲對EOSIO不瞭解,因此只能按照字面意思硬譯。翻譯完以後,我發現除了keosd(EOSIO錢包),其它幾個程序的做用仍然不明因此。ubuntu

好在今天的任務是搭建環境,可以將這幾個程序安裝起來而且正常運行就能夠了,各個程序的具體做用後面再作深刻學習。網絡

開始構建

參考開發文檔,執行下面的命令,若是源碼已下載可忽略第一行。app

git clone https://github.com/EOSIO/eos.git –recursive 
cd eos/Docker 
docker build . -t eosio/eoscurl

開始執行之後不須要人工干預,讓機器自動運行就能夠了,整個過程會持續半小時到一小時。

在執行的過程中,咱們來分析一下構建的步驟,打開eos/Docker/DockerFile 文件,能夠看到下面的內容。

FROM eosio/builder as builder

RUN git clone -b master –depth 1 https://github.com/EOSIO/eos.git –recursive \ 
&& cd eos \ 
&& cmake -H. -B」/tmp/build」 -GNinja -DCMAKE_BUILD_TYPE=Release -DWASM_ROOT=/opt/wasm -DCMAKE_CXX_COMPILER=clang++ \ 
-DCMAKE_C_COMPILER=clang -DCMAKE_INSTALL_PREFIX=/tmp/build -DSecp256k1_ROOT_DIR=/usr/local \ 
&& cmake –build /tmp/build –target install

FROM ubuntu:16.04

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install openssl && rm -rf /var/lib/apt/lists/* 
COPY –from=builder /usr/local/lib/* /usr/local/lib/ 
COPY –from=builder /tmp/build/bin /opt/eosio/bin 
COPY –from=builder /tmp/build/contracts /contracts 
COPY –from=builder /eos/Docker/config.ini /eos/genesis.json / 
COPY nodeosd.sh /opt/eosio/bin/nodeosd.sh 
ENV EOSIO_ROOT=/opt/eosio 
RUN chmod +x /opt/eosio/bin/nodeosd.sh 
ENV LD_LIBRARY_PATH /usr/local/lib 
VOLUME /opt/eosio/bin/data-dir 
ENV PATH /opt/eosio/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

整個構建過程能夠分紅下面幾個步驟:

  1. 下載eosio/builder鏡像。這個鏡像包含了EOSIO運行時須要的各類軟件和配置信息。
  2. 編譯生成可執行文件並安裝。這一步與直接使用源碼構建環境是同樣的,環境參數可能會有細微差異。
  3. 下載ubuntu鏡像。看來Docker環境使用的是Ubuntu系統16.04版本。
  4. 安裝軟件,拷貝配置信息,設置環境變量等等。

構建失敗

正當我覺得構建會很順利的時候,命令行上出現一條錯誤信息: 
0406001

在執行」COPY –from=builder /eos/Docker/config.ini /eos/genesis.json /」 語句時出錯,eos/genesis.json文件不存在。

這就奇怪了,難道官方開發人員本身沒有跑過構建腳本?仍是我本地環境的緣由致使的錯誤?

我嘗試着將DockerFile中的」eos/genesis.json / 「替換成」eos/genesis.json」,由於結尾那個多餘的 / 看着很是可疑,與前面的地址中間隔了一個空格。

修改以後沒有報錯,構建成功而且生成了鏡像,可是在啓動鏡像時出現異常,此法不通。

我又另外嘗試了幾個方法,仍然沒法生成正確的鏡像,無奈之下,我去GitHub上提交了一個Bug,看看官方開發人員怎麼說。

0406002

然並卵,只有兩個同病相憐的小夥伴說跟我遇到了同樣的問題,官方開發人員並無答覆。

0406003

生成不了正確的鏡像,難道個人EOS開發之旅要就此夭折?

固然不會,不然我也不必寫今天這篇文章了,正所謂條條大路通羅馬,本身生成不了鏡像,就拿官方已經生成好的。

下載eosio/eos鏡像

還記得前面執行的命令麼

docker build . -t eosio/eos

這句話的意思是讓咱們生成一個名爲eosio/eos的鏡像文件,在Docker的命名習慣下,eosio/eos對應了Docker公共倉庫eosio命名空間下的eos倉庫。也就是說,EOS官方頗有可能已經把編譯好的鏡像文件上傳到Docker公共倉庫中。

事實是否如此?我嘗試作了如下操做。

1.刪除本地異常的eosio/eos鏡像

docker rmi e7bc2acf31bf

0407001

2.下載eosio/eos鏡像

docker pull eosio/eos

0407002
還真讓我下載到了。

環境驗證

下載好了鏡像,咱們來進一步驗證該鏡像是否可用,不論是本身生成的鏡像,仍是從Docker倉庫下載的,下面的驗證步驟都是同樣的。

參考開發文檔Start nodeos docker container only章節。

1.啓動一個nodeos節點

docker run –name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh arg1 arg2

0407003
啓動成功

2.驗證nodeos節點是否可用

curl http://127.0.0.1:8888/v1/chain/get_info

0407004
驗證經過

3.同時啓動nodeos和kesod節點

docker volume create –name=nodeos-data-volume 
docker volume create –name=keosd-data-volume 
docker-compose -f docker-compose.yml up "-d"

0407005

這一步要注意幾點:

  • 執行命令前先把第1步啓動的nodeos節點停掉
  • docker-compose命令相關的配置信息在/eos/Docker/docker-compose.yml文件中
  • 官方文檔是說啓動nodeos和kesod兩個節點,但實際上還啓動了builder節點,通過測試這個節點是沒有用的,你們能夠從docker-compose.yml文件中將builder節點相關的配置信息刪掉。

4.執行cleos命令

      先設置cleos環境變量/etc/profile

export PATH=$PATH:/root/eos/build/programs/nodeos
export PATH=$PATH:/root/eos/build/programs/cleos

  而後執行cleos命令,測試eos安裝環境

cleos get info 
cleos get account inita

0407007

注意head_block_num的值時10239,在前面驗證nodeos節點是否可用時,返回的head_block_num是711,這說明nodeos節點已經在自動生成區塊了。

至此環境驗證完畢,部署成功。

小結

整個環境構建過程並不複雜,開發文檔已經寫得比較清楚,順利的話1到2個小時能夠完成。

不過你們仍是要注意隨機應變,不能徹底依賴開發文檔,好比當我遇到生成鏡像失敗的問題時,直接從Docker倉庫下載鏡像,這一點EOS的開發文檔中是沒有的。

另外還有一點要注意,開發文檔的內容變更很頻繁。我剛開始看文檔的時候,仍是在 https://github.com/EOSIO/eos 裏面,不知何時開始就變到 https://github.com/EOSIO/eos/wiki 裏面,目錄結構也變了。

最後仍是要吐槽一下EOS官方開發人員

  • 既然能夠直接下載鏡像,幹嗎還讓咱們本身構建,太浪費時間。
  • 讓咱們本身構建就算了,能不能測一下構建腳本,沒有BUG了再上傳?

今天中午在GitHub看到昨天提交的BUG已經Close,官方開發人員的回覆是:已經刪除genesis.json文件。我尚未測試,但願此次修改以後不會再有新的問題。

0407006

轉自:https://blog.csdn.net/wanf425/article/details/80716316

相關文章
相關標籤/搜索