EOSIO開發(fā)(一)使用Docker構建本地環(huán)境

前言

一直想學習EOS開發(fā)汉嗽,但是不知道怎么入門欲逃。最近從GitHub上下載了源碼,發(fā)現(xiàn)官方已經(jīng)提供了完整的EOSIO開發(fā)入門教程饼暑,既然如此趕緊開始行動稳析。今天是系列文章的第一篇,介紹如何使用Docker搭建本地環(huán)境弓叛。

選擇構建方式

官方支持兩種方式搭建本地環(huán)境

  • 使用源碼
  • 使用Docker

我個人首選Docker彰居,因為可以將與EOSIO相關的軟件、環(huán)境都封裝在一個鏡像中撰筷,不管是出了問題要回退陈惰,還是學完以后刪除相關的軟件,Docker都很方便毕籽。

所以在這篇文章中我就不介紹怎么使用源碼構建了抬闯,有興趣的同學可以參考官方文檔的Building EOSIO章節(jié)。

前期準備

EOSIO的構成

在正式開始構建之前关筒,我們先來了解EOSIO的組成部分溶握,官方文檔對于EOSIO是這么介紹的。

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

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

中文是我自己翻譯的蒸播,請原諒我的學渣翻譯水平睡榆,由于對EOSIO不了解后频,所以只能按照字面意思硬譯纽谒。翻譯完之后,我發(fā)現(xiàn)除了keosd(EOSIO錢包),其它幾個程序的作用仍然不明所以征峦。

好在今天的任務是搭建環(huán)境,能夠將這幾個程序安裝起來并且正常運行就可以了溅蛉,各個程序的具體作用后面再做深入學習嫡意。

開始構建

參考開發(fā)文檔,執(zhí)行下面的命令劳曹,如果源碼已下載可忽略第一行奴愉。

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

開始執(zhí)行以后不需要人工干預,讓機器自動運行就可以了铁孵,整個過程會持續(xù)半小時到一小時锭硼。

在執(zhí)行的過程當中,我們來分析一下構建的步驟蜕劝,打開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. 編譯生成可執(zhí)行文件并安裝。這一步與直接使用源碼構建環(huán)境是一樣的婴削,環(huán)境參數(shù)可能會有細微差別廊镜。
  3. 下載ubuntu鏡像“λ祝看來Docker環(huán)境使用的是Ubuntu系統(tǒng)16.04版本嗤朴。
  4. 安裝軟件,拷貝配置信息虫溜,設置環(huán)境變量等等雹姊。

構建失敗

正當我以為構建會很順利的時候,命令行上出現(xiàn)一條錯誤信息:


0406001

在執(zhí)行"COPY --from=builder /eos/Docker/config.ini /eos/genesis.json /" 語句時出錯衡楞,eos/genesis.json文件不存在吱雏。

這就奇怪了,難道官方開發(fā)人員自己沒有跑過構建腳本瘾境?還是我本地環(huán)境的原因導致的錯誤歧杏?

我嘗試著將DockerFile中的"eos/genesis.json / "替換成"eos/genesis.json",因為結尾那個多余的 / 看著非臣娜福可疑得滤,與前面的地址中間隔了一個空格。

修改之后沒有報錯盒犹,構建成功并且生成了鏡像懂更,但是在啟動鏡像時出現(xiàn)異常眨业,此法不通。

我又另外嘗試了幾個方法沮协,仍然無法生成正確的鏡像龄捡,無奈之下,我去GitHub上提交了一個Bug慷暂,看看官方開發(fā)人員怎么說聘殖。

0406002

然并卵,只有兩個同病相憐的小伙伴說跟我遇到了一樣的問題行瑞,官方開發(fā)人員并沒有答復奸腺。

0406003

生成不了正確的鏡像,難道我的EOS開發(fā)之旅要就此夭折血久?

當然不會突照,否則我也沒必要寫今天這篇文章了,正所謂條條大路通羅馬氧吐,自己生成不了鏡像讹蘑,就拿官方已經(jīng)生成好的。

下載eosio/eos鏡像

還記得前面執(zhí)行的命令么

docker build . -t eosio/eos

這句話的意思是讓我們生成一個名為eosio/eos的鏡像文件筑舅,在Docker的命名習慣下座慰,eosio/eos對應了Docker公共倉庫eosio命名空間下的eos倉庫。也就是說翠拣,EOS官方很有可能已經(jīng)把編譯好的鏡像文件上傳到Docker公共倉庫中版仔。

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

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

docker rmi e7bc2acf31bf

0407001

2.下載eosio/eos鏡像

docker pull eosio/eos

0407002

還真讓我下載到了邦尊。

環(huán)境驗證

下載好了鏡像背桐,我們來進一步驗證該鏡像是否可用优烧,不管是自己生成的鏡像,還是從Docker倉庫下載的链峭,下面的驗證步驟都是一樣的畦娄。

參考開發(fā)文檔Start nodeos docker container only章節(jié)。

1.啟動一個nodeos節(jié)點

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

0407003

啟動成功

2.驗證nodeos節(jié)點是否可用

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

0407004

驗證通過

3.同時啟動nodeos和kesod節(jié)點

docker volume create --name=nodeos-data-volume
docker volume create --name=keosd-data-volume
docker-compose up -d

0407005

這一步要注意幾點:

  • 執(zhí)行命令前先把第1步啟動的nodeos節(jié)點停掉
  • docker-compose命令相關的配置信息在/eos/Docker/docker-compose.yml文件中
  • 官方文檔是說啟動nodeos和kesod兩個節(jié)點弊仪,但實際上還啟動了builder節(jié)點熙卡,經(jīng)過測試這個節(jié)點是沒有用的,大家可以從docker-compose.yml文件中將builder節(jié)點相關的配置信息刪掉励饵。

4.執(zhí)行cleos命令

alias cleos='docker-compose exec keosd /opt/eosio/bin/cleos -H nodeosd'
cleos get info
cleos get account inita

0407007

注意head_block_num的值時10239驳癌,在前面驗證nodeos節(jié)點是否可用時,返回的head_block_num是711役听,這說明nodeos節(jié)點已經(jīng)在自動生成區(qū)塊了颓鲜。

至此環(huán)境驗證完畢表窘,部署成功。

小結

整個環(huán)境構建過程并不復雜甜滨,開發(fā)文檔已經(jīng)寫得比較清楚乐严,順利的話1到2個小時可以完成。

不過大家還是要注意隨機應變衣摩,不能完全依賴開發(fā)文檔昂验,比如當我遇到生成鏡像失敗的問題時,直接從Docker倉庫下載鏡像艾扮,這一點EOS的開發(fā)文檔中是沒有的既琴。

另外還有一點要注意,開發(fā)文檔的內容變動很頻繁泡嘴。我剛開始看文檔的時候呛梆,還是在 https://github.com/EOSIO/eos 里面,不知什么時候開始就變到 https://github.com/EOSIO/eos/wiki 里面磕诊,目錄結構也變了填物。

最后還是要吐槽一下EOS官方開發(fā)人員

  • 既然可以直接下載鏡像,干嘛還讓我們自己構建霎终,太浪費時間滞磺。
  • 讓我們自己構建就算了,能不能測一下構建腳本莱褒,沒有BUG了再上傳击困?

今天中午在GitHub看到昨天提交的BUG已經(jīng)Close,官方開發(fā)人員的回復是:已經(jīng)刪除genesis.json文件广凸。我還沒有測試阅茶,希望這次修改之后不會再有新的問題。

0407006
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末谅海,一起剝皮案震驚了整個濱河市脸哀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扭吁,老刑警劉巖撞蜂,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侥袜,居然都是意外死亡蝌诡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門枫吧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浦旱,“玉大人,你說我怎么就攤上這事九杂“浜” “怎么了代兵?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長爷狈。 經(jīng)常有香客問我植影,道長,這世上最難降的妖魔是什么涎永? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任思币,我火速辦了婚禮,結果婚禮上羡微,老公的妹妹穿的比我還像新娘谷饿。我一直安慰自己,他們只是感情好妈倔,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布博投。 她就那樣靜靜地躺著,像睡著了一般盯蝴。 火紅的嫁衣襯著肌膚如雪毅哗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天捧挺,我揣著相機與錄音虑绵,去河邊找鬼。 笑死闽烙,一個胖子當著我的面吹牛翅睛,可吹牛的內容都是我干的。 我是一名探鬼主播黑竞,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捕发,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了很魂?” 一聲冷哼從身側響起扎酷,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎莫换,沒想到半個月后霞玄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡拉岁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惰爬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喊暖。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撕瞧,靈堂內的尸體忽然破棺而出陵叽,到底是詐尸還是另有隱情狞尔,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布巩掺,位于F島的核電站偏序,受9級特大地震影響,放射性物質發(fā)生泄漏胖替。R本人自食惡果不足惜研儒,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望独令。 院中可真熱鬧端朵,春花似錦、人聲如沸燃箭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽招狸。三九已至敬拓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裙戏,已是汗流浹背恩尾。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挽懦,地道東北人翰意。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像信柿,于是被迫代替她去往敵國和親冀偶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容

  • EOS架構簡單介紹 比較有價值的網(wǎng)站 http://www.eosdata.io https://steemit....
    糖果果老師閱讀 688評論 0 2
  • 轉載自 http://blog.opskumu.com/docker.html 一渔嚷、Docker 簡介 Docke...
    極客圈閱讀 10,501評論 0 120
  • 一进鸠、Docker 簡介 Docker 兩個主要部件:Docker: 開源的容器虛擬化平臺Docker Hub: 用...
    R_X閱讀 4,388評論 0 27
  • 《市場街的最后一站》 推薦理由:生活從來不缺少美,而是缺少發(fā)現(xiàn)美的眼睛形病】湍辏《市場街的最后一站》就是一部關于發(fā)現(xiàn)美的圖...
    xhyread閱讀 794評論 0 0
  • 2017年10月3日星期二晴 今天爸爸媽媽和我,還有爺爺奶奶漠吻,舅舅量瓜,和舅舅的女朋友我們一起來到了南戴河旅行。來到...
    陳泉妡閱讀 277評論 0 2