TMT观察网_独特视角观察TMT行业

基于Ubuntu Docker環境下進行以太坊實踐區塊鏈

巴比特資訊 2018-08-28 15:01
分享到:
導讀

本文是指導以太坊技術愛好者,通過基于Ubuntu環境下通過docker來進行以太坊的客戶端安裝和調試的指導教程。

本文是指導以太坊技術愛好者,通過基于Ubuntu環境下通過docker來進行以太坊的客戶端安裝和調試的指導教程。

目錄

1、實踐環境要求

2、Ubuntu版本說明

3、Docker安裝

4、Ethereum安裝與實踐

5、ZSH小工具推薦

1 實踐環境要求

1.1 概述

https://docs.docker.com/engine/installation/linux/ubuntulinux/

上面這篇文章主要指導你去安裝使用Docker-managed發布包及其安裝機制。使用這些包確保你獲得最近的docker官方發布版本。如果你需要安裝使用Ubuntu-managed包,查閱Ubuntu文檔。

1.2 docker對操作系統支持

Ubuntu Xenial 16.04[LTS]

Ubuntu Trusty 14.04[LTS]

Ubuntu Precise 12.04[LTS]

1.3 前置需求

不管你是Ubuntu的哪個版本,Docker需要64的操作系統。此外你的kernel內核至少要在3.10版本之上。最近的3.10小版本或者最新的維護版本也是可以接受的。kernel3.10版本之前的系統缺少一些特性來運行docker容器。這些舊版本有些已知的bugs會導致數據丟失并且在一定條件下會頻繁的故障。檢查你當前的kernel版本,打開終端,輸入uname –r

注意:如果你之前使用APT安裝過docker,為了新版本的docker倉庫,確保你更新了APT源。

1.4 更新apt源

Docker的APT倉庫包含1.7.1以及更高的版本。通過設置APT使用來自docker倉庫的包。

1) 登陸機器,用戶必須使用sudo或者root權限。

2) 打開終端

3) 更新包信息,確保APT能使用https方式工作,并且CA證書已安裝了

1 2 3
#sudo apt-get update#sudo apt-get install apt-transport-https ca-certificates

出現這個問題可能是有另一個程序正在運行,導致資源被鎖不可用。而導致資源被鎖的原因可能是上次運行安裝或更新沒有正常完成,解決辦法就是刪掉。

1 2 3
#sudo rm /var/cache/apt/archives/lock#sudo rm /var/lib/dpkg/lock

4)添加一個新的GPG密鑰

1
#sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

5)找到合適你的Ubuntu操作系統的鍵,這個鍵決定APT將搜索哪個包。可能的鍵有:

Ubuntu version: Precise 12.04, Trusty 14.04,Cenial 16.04

注意:docker沒有為所有的架構提供包,Binary artifacts are built nightly,你可以從以下鏈接下載。

https://master.dockerproject.org. 在一個多架構的系統上安裝docker,為鍵添加一個[arch=]條款。更多細節參考Debian Multiarch維基百科。

6)運行下面的命令,用占位符為你的操作系統替換鍵。

#echo “” | sudo tee /etc/apt/sources.list.d/docker.list

比如你是16.04將上面命令的

替換成deb https://apt.dockerproject.org/repoubuntu-xenial main 執行那條命令,就在那個文件夾下創建了一個docker.list文件,里面的內容就是

deb https://apt.dockerproject.org/repoubuntu-xenial main

7)更新APT包索引

1
#sudo apt-get update

8)校驗APT是從一個正確的倉庫拉取安裝包。

當運行下面命令的時候,這個鍵會返回你目前可以安裝的docker版本,每個鍵都包括URL:https://apt.dockerproject.org/repo/。下面是截取的部分輸出內容。

1
#apt-cache policy docker-engine

現在當你運行apt-get upgrade的時候,APT就會從新的倉庫拉安裝包。

2 Ubuntu版本說明

2.1 前置準備操作

Ubuntu Xenial 16.04[LTS],Ubuntu Trusty 14.04[LTS]這兩個版本記得安裝linux-iamge-extra-*的kernel包。這個包允許你使用aufs存儲驅動。

# sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

Ubuntu Precise 12.04[LTS]對于這個版本,你需要3.13以上的kernel版本,你必須升級。下面表格指導你需要哪些包:

你可以執行以下命令:

1 2 3
#sudo apt-get install linux-image-generic-lts-trusty#sudo reboot

3 Docker安裝

3.1 前置操作

1).登陸系統,用你的賬號使用sudo全權限

2).運行命令apt-get install openssh-server安裝ssh 查看是否安裝成功ps -ef|grep ssh

3).更新APT包索引:sudo apt-get update

4).安裝docker:sudo apt-get install docker-engine

5).開啟docker后臺進程:sudo service docker start

6).校驗docker是否安裝成功:sudo docker run hello-world

這個命令會下載一個測試鏡像,并且運行在一個容器中。當容器運行時,他會打印一些信息,并且退出。

3.2 創建一個docker組

docker后臺進程是綁定的Unix的socket而不是TCP端口。默認情況下,Unix的socket屬于用戶root,其它用戶要使用要通過sudo命令。由于這個原因,docker daemon通常使用root用戶運行。為了避免使用sudo當你使用docker命令的時候,創建一個Unix組名為docker并且添加用戶。當docker daemon啟動,它會分配Unix socket讀寫權限給所屬的docker組。

注意:docker組不等價于用戶root,如果想要知道的更多關于安全影響,查看docker daemon attack surface。

1 2 3
#sudo groupadd docker#sudo usermod -aG docker $USER

退出再重進,確保該用戶有正確的權限。校驗生效,通過運行docker命令不帶sudo:docker run hello-world,如果失敗會有以下類似的信息:Cannot connect to the Docker daemon. Is ‘docker daemon’ running on this host?確保DOCKER_HOST環境變量沒有設置。如果有取消它。

3.3 調整內存和交換區計算

當用戶運行docker時,他們可能在使用一個鏡像時看見下面的信息:

WARNING: Your kernel does not support cgroup swap limit. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

為了阻止這些信息,在你的系統中啟用內存和交換區計算。這個操作會導致即便docker沒有使用也有內存開銷以及性能下降。內存開銷大概是總內存的1%。性能降低了大約10%。

修改/etc/default/grub文件。vi或者vim命令都行,設置GRUB_CMDLINE_LINUX的值,如下:

GRUB_CMDLINE_LINUX=“cgroup_enable=memory swapaccount=1”。

保存文件并關閉。

1
#sudo update-grub

更新啟動項,reboot重啟你的系統。

3.4 啟動UFW轉發

當你運行docker時,在同一臺主機上使用UFW(Uncomplicated Firewall) ,你需要額外的配置。docker使用橋接方式來管理容器的網絡。默認情況下,UFW廢棄所有的轉發流量。因此,docker運行時UFW可以使用,你必須設置合適UFW的轉發規則。

UFW默認配置規則拒絕了所有傳入流量。如果你想要從另一個主機到達你的容器需要允許連接docker的端口。docker的默認端口是2376如果TLS啟用,如果沒有啟動則是2375,會話是不加密的。默認情況,docker運行在沒有TLS啟動的情況下。

  • 為了配置UFW并且允許進入的連接docker端口:

  • 檢查UFW是否安裝并啟用:

1
#sudo ufw status
  • 打開/etc/default/ufw文件并編輯:

1
#sudo nano /etc/default/ufw
  • 設置DEFAULT_FORWARD_POLICY:DEFAULT_FORWARD_POLICY=“ACCEPT”

  • 保存退出并重啟使用新的設置:

1
#sudo ufw reload
  • 允許所有的連接到docker端口:

1
#sudo ufw allow 2375/tcp

3.5 為docker配置DNS服務器

系統運行桌面的Ubuntu或者Ubuntu衍生產品通常使用127.0.0.1作為默認的nameserver文件/etc/resolv.conf文件中。NetworkManager也通常設置dnsmasq nameserver 127.0.0.1在/etc/resolv.conf。

當在桌面機器運行容器,使用這些配置時,docker的使用者會看見這些警告:

WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can’t use it. Using default external servers : [8.8.8.8 8.8.4.4]

這個警告發生是因為docker容器不能使用本地DNS命名服務器。此外docker默認使用一個額外的nameserver。

為了避免這個警告,你可以在使用docker容器的時候指定一個DNS服務器?;蛘吣憧梢越胐nsmasq在NetworkManager中。但是,禁用會導致DNS協議在某些網絡中變慢。

下面的說明描述了如何在Ubuntu14.0或以下版本配置docker守護進程。Ubuntu15.04及之上的使用systemd用于啟動項和服務管理。指導通過使用systemd來配置和控制一個守護進程。

  • 設置指定的DNS服務:

打開/etc/default/docker文件并編輯:sudo nano /etc/default/docker,添加配置項:DOCKER_OPTS=“—dns 8.8.8.8”。將8.8.8.8用一個本地的DNS服務例如192.168.1.1替換。你也可以配置多個DNS服務器。

用空格隔開它們,如:—dns 8.8.8.8 —dns 192.168.1.1。

警告:當你在筆記本連接了不同網絡的情況時做這些操作,確保選擇一個公用的DNS服務器。保存文件并退出,重啟docker守護進程:sudo service docker restart。或者另一個選擇,禁用dnsmasq在網絡管理器中,這可能導致你的網速變慢:

  • 打開/etc/NetworkManager/NetworkManager.conf文件,

  • 編輯它:sudo nano /etc/NetworkManager/NetworkManager.conf。

  • 找到行dns=dnsmasq,注釋掉。

  • 保存關閉文件,重啟網絡管理器和docker.

1 2 3
#sudo restart network-manager#sudo restart docker

3.6 配置docker引導啟動

Ubuntu15.04之后使用systemd作為引導啟動和服務管理,14.10及以下版本是upstart。15.04以上,需要配置docker守護進程boot啟動,

  • 運行命令:

1
#sudo systemctl enable docker

14.10及以下版本安裝方法會自動配置upstart來啟動docke daemon在boot。

3.7 升級卸載docker

  • 升級:

1
#sudo apt-get upgrade docker-engine
  • 卸載:

1
#sudo apt-get purge docker-engine
  • 卸載及依賴:

1
#sudo apt-get autoremove --purge docker-engine
  • 上述命令不會卸載images,containers,volumes或者用戶自己創建的配置文件。

你如果想刪除這些東西,執行下面的命令:

1
#rm -rf /var/lib/docker
  • 安裝最簡單的方法是:

1 2 3
#sudo apt-get update  #sudo apt-get install

3.8 執行docker-compose安裝

docker-compose 是用于定義和運行復雜docker應用的工具,以yaml定義語言在一個docker-compose.yaml文件中定義一個包括多容器的應用,用一條命令即可啟動應用中包括的所有docker container,容器啟動所有依賴的動作都會被工具自動完成。

1 2 3
#curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose#chmod  x /usr/local/bin/docker-

4 Ethereum安裝與實踐

4.1 通過docker安裝Ethereum

  • 運行如下命令

1
#docker pull docker.io/ethereum/client-go

4.2 直接安裝Ethereum

  • 運行如下命令

1 2 3
#apt-get update#apt-get install software-properties-common add-apt-repository -y ppa:ethereum/ethereum
  • 安裝一個穩定版本的以太坊

1 2 3 4 5
#apt-get update#apt-get install ethereum#apt-get update
  • 生成引導節點ID

1
#bootnode --genkey=boot.key
  • 運行引導節點

1
#bootnode --nodekey=boot.key

4.3 新建genesis.json文件

  • 運行以下命令

1
vi genesis.json
  • 輸入

4.4 初始化創始區塊

  • 運行如下命令

1
#docker run -itd --privileged=true -v /path/docker/dev1:/root/ethdev --name gethDev1 ethereum/client-go --datadir /root/ethdev --networkid 8765639736937780 init /root/ethdev/genesis.json

4.5 創建Ethereum節點的容器

  • 運行如下命令

1 2 3
#docker rm -f gethDev1#docker run -itd -m 512M --privileged=true --memory-swap -1 --net=host -p 8545:8545 -p 40303:40303 -v /path/docker/dev1:/root/ethdev --name gethDev1 ethereum/client-go --ipcdisable --port 40303 --bootnodes "enode://2039a49989e45bf119ecd21403607ea9f5888b13a6bb7a03ed81687deabb251095e4193a77eca067076f77ed40e4c6fd51539038c440337beffbbb36953d1d75@192.168.3.43:30301" --debug --nodiscover --rpcapi "db,eth,net,web3,personal,admin,miner,txpool" --datadir /root/ethdev --networkid 8765639736937780 --wsapi "db,eth,net,web3,personal,admin,miner,txpool" --ws --wsaddr "0.0.0.0" --rpc --rpcaddr "0.0.0.0" --cache=512 --verbosity 6 --mine --minerthreads=1 --etherbase=0x5f38056f45091ee992298e53681b0a60c999ff95 console

4.6 查看Ethereum節點docker日志

  • 運行如下命令

1
#docker logs -f gethDev1

4.7啟動Ethereum節點

  • 運行如下命令

1
#docker startgethDev1

4.8 Attach Ethereum節點

  • 運行如下命令

1
#docker attach gethDev1

4.9 Detach Ethereum節點

先后按下鍵盤ctrl p q退出節點,注意:有先后順序

4.10 停止Ethereum節點

  • 運行命令如下

1
#docker stopgethDev1

4.11 Ethereum日志釋疑

  • 首先,告警提示geth抱怨沒有定義etherbase,etherbase是成功挖掘區塊,執行智能合約并在區塊鏈內返回結果之后用來接收以太獎勵的“默認以太坊地址”。這個帳戶,在開發合同時也很方便。

  • 接下來,我們看到blockchain數據被寫入/root/.ethereum/chaindata,因為我們已經從我們的主機掛載了這個目錄,我們應該可以在本地磁盤上看到出現的數據:

  • docker exec –i ethereum geth account new ls –l /opt/docker/ethereum/keystore/. docker exec ethereum apt-get install –y ntpdate docker exec ethereum ntpdate –s ntp.ubuntu.com

在當前配置中,我們有一個可以掛載到我們的容器中的以太坊數據目錄。這不是因為區塊鏈數據只能在任何情況下由一個進程訪問,而是訪問可由Ethereum節點用于進程間通信的IPC文件描述符。因此,我們可以在這里繼續,而不需要訪問網絡。

5 zsh小工具推薦

zsh是一款小工具,對命令補全功能非常強大,可以補齊路徑,補齊命令,補齊參數等。

5.1 修改root用戶SHELL

先進入root用戶,命令:

1
su root

查看默認SHELL命令:

1
echo $SHELL

然后查看是否安裝了zsh,命令:

1
cat /etc/shells

默認沒有安裝,那么先安裝zsh,命令:

1
apt-get install zsh

確認zsh是否安裝成功,命令:

1
zsh --version

接下來替換bash為zsh,命令:

1
chsh -s /bin/zsh

然后reboot重啟,之后查看默認SHELL,發現修改為/bin/zsh

查看是否安裝git,命令:

1
git –version

如果沒有安裝則安裝,命令:

1
apt-get install git

最后下載oh-my-zsh,命令:

1
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

出現如上則安裝成功,重新進入終端即可。

5.2 修改普通用戶SHELL

查看默認SHELL,命令:

1
echo $SHELL

如果是/bin/zsh則直接:

1
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

是/bin/bash則,切換:

1
chsh -s /bin/zsh

然后用root權限reboot,然后:

1
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

安裝成功后可以(vi ~/.zshrc)來修改配置文件以改變樣式(注意root和非root都要改,可以選擇不一樣的樣式)。

root的樣式配置文件在根目錄root下,為隱藏文件;非root在/home/root下。

具體樣式選擇https://github.com/robbyrussell/oh-my-zsh/wiki/themes

docker 安裝 命令 運行 使用
分享到:

1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。


專題報道

主站蜘蛛池模板: 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 无尘烘箱_洁净烤箱_真空无氧烤箱_半导体烤箱_电子防潮柜-深圳市怡和兴机电 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 沈阳网站建设_沈阳网站制作_沈阳网页设计-做网站就找示剑新零售 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 泰国试管婴儿_泰国第三代试管婴儿_泰国试管婴儿费用/多少钱_孕泰来 | 合肥弱电工程_安徽安防工程_智能化工程公司-合肥雷润 | 液压油缸-液压站生产厂家-洛阳泰诺液压科技有限公司 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 恒温槽_恒温水槽_恒温水浴槽-上海方瑞仪器有限公司 | 成都竞价托管_抖音代运营_网站建设_成都SEM外包-成都智网创联网络科技有限公司 | 搅拌磨|搅拌球磨机|循环磨|循环球磨机-无锡市少宏粉体科技有限公司 | 球磨机 选矿球磨机 棒磨机 浮选机 分级机 选矿设备厂家 | 27PR跨境电商导航 | 专注外贸跨境电商| 精益专家 - 设备管理软件|HSE管理系统|设备管理系统|EHS安全管理系统 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 江苏远邦专注皮带秤,高精度皮带秤,电子皮带秤研发生产 | 高楼航空障碍灯厂家哪家好_航空障碍灯厂家_广州北斗星障碍灯有限公司 | 自动配料系统_称重配料控制系统厂家| 游泳池设计|设备|配件|药品|吸污机-东莞市太平洋康体设施有限公司 | 连续油炸机,全自动油炸机,花生米油炸机-烟台茂源食品机械制造有限公司 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 智能监控-安防监控-监控系统安装-弱电工程公司_成都万全电子 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | 深圳VI设计-画册设计-LOGO设计-包装设计-品牌策划公司-[智睿画册设计公司] | 光伏支架成型设备-光伏钢边框设备-光伏设备厂家 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 深圳市东信高科自动化设备有限公司 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 主题班会网 - 安全教育主题班会,各类主题班会PPT模板 | 海日牌清洗剂-打造带电清洗剂、工业清洗剂等清洗剂国内一线品牌 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 |