基于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 |
|
出现这个问题可能是有另一个程序正在运行,导致资源被锁不可用。而导致资源被锁的原因可能是上次运行安装或更新没有正常完成,解决办法就是删掉。
1 2 3 |
|
4)添加一个新的GPG密钥
1 |
|
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 |
|
8)校验APT是从一个正确的仓库拉取安装包。
当运行下面命令的时候,这个键会返回你目前可以安装的docker版本,每个键都包括URL:https://apt.dockerproject.org/repo/%E3%80%82%E4%B8%8B%E9%9D%A2%E6%98%AF%E6%88%AA%E5%8F%96%E7%9A%84%E9%83%A8%E5%88%86%E8%BE%93%E5%87%BA%E5%86%85%E5%AE%B9%E3%80%82
1 |
|
现在当你运行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 |
|
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 |
|
退出再重进,确保该用户有正确的权限。校验生效,通过运行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 |
|
更新启动项,reboot重启你的系统。
3.4 启动UFW转发
当你运行docker时,在同一台主机上使用UFW(Uncomplicated Firewall) ,你需要额外的配置。docker使用桥接方式来管理容器的网络。默认情况下,UFW废弃所有的转发流量。因此,docker运行时UFW可以使用,你必须设置合适UFW的转发规则。
UFW默认配置规则拒绝了所有传入流量。如果你想要从另一个主机到达你的容器需要允许连接docker的端口。docker的默认端口是2376如果TLS启用,如果没有启动则是2375,会话是不加密的。默认情况,docker运行在没有TLS启动的情况下。
1 |
|
1 |
|
1 |
|
1 |
|
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服务器。或者你可以禁用dnsmasq在NetworkManager中。但是,禁用会导致DNS协议在某些网络中变慢。
下面的说明描述了如何在Ubuntu14.0或以下版本配置docker守护进程。Ubuntu15.04及之上的使用systemd用于启动项和服务管理。指导通过使用systemd来配置和控制一个守护进程。
打开/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在网络管理器中,这可能导致你的网速变慢:
1 2 3 |
|
3.6 配置docker引导启动
Ubuntu15.04之后使用systemd作为引导启动和服务管理,14.10及以下版本是upstart。15.04以上,需要配置docker守护进程boot启动,
1 |
|
14.10及以下版本安装方法会自动配置upstart来启动docke daemon在boot。
3.7 升级卸载docker
1 |
|
1 |
|
1 |
|
你如果想删除这些东西,执行下面的命令:
1 |
|
1 2 3 |
|
3.8 执行docker-compose安装
docker-compose 是用于定义和运行复杂docker应用的工具,以yaml定义语言在一个docker-compose.yaml文件中定义一个包括多容器的应用,用一条命令即可启动应用中包括的所有docker container,容器启动所有依赖的动作都会被工具自动完成。
1 2 3 |
|
4 Ethereum安装与实践
4.1 通过docker安装Ethereum
1 |
|
4.2 直接安装Ethereum
1 2 3 |
|
1 2 3 4 5 |
|
1 |
|
1 |
|
4.3 新建genesis.json文件
1 |
|
4.4 初始化创始区块
1 |
|
4.5 创建Ethereum节点的容器
1 2 3 |
|
4.6 查看Ethereum节点docker日志
1 |
|
4.7启动Ethereum节点
1 |
|
4.8 Attach Ethereum节点
1 |
|
4.9 Detach Ethereum节点
先后按下键盘ctrl+p+q退出节点,注意:有先后顺序
4.10 停止Ethereum节点
1 |
|
4.11 Ethereum日志释疑
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 |
|
查看默认SHELL命令:
1 |
|
然后查看是否安装了zsh,命令:
1 |
|
默认没有安装,那么先安装zsh,命令:
1 |
|
确认zsh是否安装成功,命令:
1 |
|
接下来替换bash为zsh,命令:
1 |
|
然后reboot重启,之后查看默认SHELL,发现修改为/bin/zsh
查看是否安装git,命令:
1 |
|
如果没有安装则安装,命令:
1 |
|
最后下载oh-my-zsh,命令:
1 |
|
出现如上则安装成功,重新进入终端即可。
5.2 修改普通用户SHELL
查看默认SHELL,命令:
1 |
|
如果是/bin/zsh则直接:
1 |
|
是/bin/bash则,切换:
1 |
|
然后用root权限reboot,然后:
1 |
|
安装成功后可以(vi ~/.zshrc)来修改配置文件以改变样式(注意root和非root都要改,可以选择不一样的样式)。
root的样式配置文件在根目录root下,为隐藏文件;非root在/home/root下。
具体样式选择https://github.com/robbyrussell/oh-my-zsh/wiki/themes
이더리움 가격 분석 : ETH / USD 200달러 이상으로 회복 가능?
주요 하이라이트• 이더리움 가격은 미국 달러 대비 168달러에서 지지를 얻은 후 상향 조정되기 시작했다.• ETH / USD의 시간별 차트(크라켄을 통한 데이터 피드)에서 183달...

지닉스,암호화폐 펀드 ‘ZXG 1호’ 공모 마감 … 경쟁률 12대 1 ...국내 최초의 암호화폐 펀드 공모, 접수 2분 만에 공모 금액(1,000ETH) 돌파
국내 최초의 암호화폐 펀드 공모, 접수 2분 만에 공모 금액(1,000ETH) 돌파펀드 투자만으로 개인 참여 어려운 유망 ICO 프로젝트에 간접 투자 가능세계 최초 암호화폐 펀드 ...
[Masterpiece YouTube+] 예스맨 가즈아 / 비탈릭발언? / 궁금증해소 / XRP내용 / 정확도 높은 차트방송 / BITCOIN / ETH / XRP - 예스맨
Korea No.1 Chart analysis and News Yotuber - YES MEN예스맨의 비트 코인 방송 채널에 오신 걸 환영합니다.◈초보자를 위한 비트코인 등 암호 ...