Docker上五分钟搭建EOS开发环境

2018/8/11 posted in  docker eos

Docker是个什么,简单说一下。它本质是在某个系统,如Linux上,跑的一个进程。但它做了一个轻量级的虚拟化,隔离出了类似虚拟机一样的独立的网络,CPU,所以可以直接把它当个虚拟机看。

Docker进程运行所在的操作系统我们一般叫作宿主机。Docker可以运行多个虚拟机,对于这个虚拟机,一般称作容器。容器或者说虚拟机内运行的也是一个操作系统,在这个系统上把软件安装好,打成一个压缩包,我们就称为镜像

方便理解的话,Docker可以当成一个虚拟机,镜像就是别人搞好的一个虚拟机文件,拿过来导入就能用了。

EOS官方在文档中强调,对于Docker这种可以跨平台,能快速运行的将优先支持。在EOS的源码下有一个Docker目录,内有对Docker的相关支持说明。地址在这里。本文将结合官方文档docker-quickstart,对在Docker跑起来一个开发环境进行说明,略有改动。

1. 安装Docker

  • 需要Docker17.05或更高版本

安装可以参考前面的一篇安装Docker的文章。

2. 五分钟开发环境搭建

注意:这是搭建开发环境,切勿用于正式环境。搭建时,我们直接使用官方做好的镜像,如需自行编译,请参考官方的Docker文档,并注意硬件配置。

docker run --rm --name eosio -d -p 8888:8888 -p 9876:9876 -v /tmp/work:/work -v /tmp/eosio/data:/mnt/dev/data -v /tmp/eosio/config:/mnt/dev/config eosio/eos-dev  /bin/bash -c "nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::wallet_plugin --plugin eosio::producer_plugin --plugin eosio::history_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::http_plugin -d /mnt/dev/data --config-dir /mnt/dev/config --http-server-address=0.0.0.0:8888 --access-control-allow-origin=* --contracts-console --http-validate-host=false"

命令说明:

命令 简单说明
docker run 使用Docker运行一个镜像,如果镜像在本地不存在,则自动去hub.docker.com进行下载。
--rm docker run的一个参数。docker默认在退出时,会保存容器的文件系统状态。这个参数,在容器退出时自动清理文件系统,注意,显式加载的卷并不会被清理。Docker官方对--rm参数的说明
--name eosio 将容器取名为eosio。
-d 后台运行容器。
-p 8888:8888 -p 9876:9876 将容器中的8888、9876端口曝露出来,并映射到docker的宿主机。两个端口分别是钱包、节点的两个服务端口。
-v /tmp/work:/work -v /tmp/eosio/data:/mnt/dev/data -v /tmp/eosio/config:/mnt/dev/config eosio/eos-dev 声明了三个持久化的卷(volumn),将Docker宿主机上的对应目录,映射到容器的对应目录下,类似mount操作。注意:显式声明的卷,在容器退出时并不出清理,也就是说这三个卷将永远存在。
eosio/eos-dev 指定运行的镜像,这个是eos官方维护的。如果镜像不在本地,会自动从hub.docker.com的官方镜像站查找,并自动下载。
/bin/bash -c 启动镜像后,要运行的命令。其实就是用bash启动eosio的相关命令。

上述命令运行完成后,使用

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
70ecc7712396        eosio/eos-dev       "/bin/bash -c 'nodeo…"   14 seconds ago      Up 4 seconds        0.0.0.0:8888->8888/tcp, 0.0.0.0:9876->9876/tcp   eosio

能看到eosio容器已经启动起来了。

官方有个建议是对cleos命令做个别名

alias cleos='docker exec -it eosio /opt/eosio/bin/cleos -u http://0.0.0.0:8888 --wallet-url http://0.0.0.0:8888'

这样就可以在本地运行cleos

做为开发,可使用下面这个命令

$ docker exec -it eosio /bin/bash

直接连上容器。连上容器后,/contracts目录下,有编译好的相关的合约。配置及区块数据在/mnt/dev目录下。也能在不创建别名的情况下,运行cleos等命令了。

3. Hello World

在宿主机的浏览器(还记得曝露端口的命令吧)输入http://localhost:8888/v1/chain/get_info,应该能看到

{
    "server_version": "40a20769",
    "chain_id": "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",
    "head_block_num": 1392564,
    "last_irreversible_block_num": 1392563,
    "last_irreversible_block_id": "00153fb32fb13b864ae95204938508b9be7aa4272938a96c9ba7cac2f05c581f",
    "head_block_id": "00153fb4074fe3b191d39f86c83dec740d2d2541fc846a1fc8bb4b3e99597b3c",
    "head_block_time": "2018-08-12T00:40:47.000",
    "head_block_producer": "eosio",
    "virtual_block_cpu_limit": 200000000,
    "virtual_block_net_limit": 1048576000,
    "block_cpu_limit": 199900,
    "block_net_limit": 1048576
}

不行的话将localhost替换为宿主机的ip。
(全文完)

感谢您的支持

zan-code

处于某些特定的环境下,可以看到评论框,欢迎留言交流^_^。

友情链接: 区块链技术中文社区