用Docker构建⼀个区块链工作和开发环境(上)

原创 2016-12-09 朱纪诚(译) Wise2C

区块链(Blockchain)是一种安全的在线交易方式。区块链是一种分布式数字账目,在全球数以千计的计算机上记录交易,使得注册的交易不能被追溯改变。他们通过集体自利的大规模协作进行认证。结果是产生一个以参与者的数据安全的不确定性为边际的健壮的工作流。区块链的使用消除了来自数字资产的无限再现性的特性。它确认每个单位的数字现金只花了一次,解决了长期存在的双重支出问题。区块链被描述为价值交换协议。这种价值交换可以更快,更安全,更便宜地通过区块链完成。区块链可以分配所有权,因为它提供了强制提供和接受的记录。

以太坊(Ethereum)是一个运行智能合约的分布式平台:保证应用程序完全按照程序运行,没有任何宕机,审查,欺诈或第三方干扰的可能性。

这些应用程序运行在一个定制的区块链上。这使开发者能够创建市场,存储债务或承诺的记录,根据很久以前给出的指令转移资金(如遗嘱或期货合约)以及很多尚未出现的未来应用场景,所有的这些都没有中间人或者交易对手风险。

在传统的服务器体系结构上,每个应用程序都必须设置自己的服务器,在独立的孤岛中运行自己的代码,使数据共享变得困难。如果单个应用遭到入侵或离线,许多用户和其他应用都会受到影响。

在区块链上,任何人都可以设置一个节点,复制所有节点的必要数据以达成协议,并由用户和应用程序开发人员进行补偿。这允许用户数据保持私有和应用程序分散像互联网应该工作。

以太坊Go(语言)团队构建一个“geth”节点的Docker镜像作为其持续构建链的一部分。 我们可以使用这些镜像在我们的本地环境中快速运行以太坊节点。本文中我们将利用Docker构建一个以太坊工作和开发环境。

## 一个完整的以太坊节点 ##

第一个测试是下载当前Ethereum go-client(“geth”)映像,并启动连接到以太坊生产网络的客户端节点。

现在,我们启动一个简单的节点,如在Ethereum文档中所描述的。一旦区块同步开始,请使用CTRL + C停止节点。我们不打算使用这个容器,所以现在不需要下载整个链数据。

上面,我们使用RUN命令启动了Docker容器。 RUN拿一个叫做“ethereum / client-go”的镜像创建了一个新容器,并启动这个镜像定义的入口点(entry point)“/ usr / bin / geth”。

以下部分需要重点理解:

  1. RUN总是创建一个新容器。这意味着,每次通过使用RUN来启动一个容器,我们最终将产生很多无用的容器。一旦创建了容器,重新启动它的正确方法是用START命令。
  2. Docker RUN命令后的命令行参数 -it -p 30303:30303。等价于“-i -t”的“-it”代表“交互式”和“终端设备(tty)”。没有这些说明,容器将在后台运行,不会给我们的终端反馈。 “-p 30303:30303”指示Docker将端口30303从容器内部暴露给主机和其他容器,端口号为30303。容器是一个隔离的环境,并且不会隐含的暴露这个端口,以太坊客户端在容器内部将不能够接触外部世界和区块链。 30303是默认的以太坊点对点网络端口。镜像名称后面的其他参数用于镜像定义为启动时的起点的命令。本例中未设置。
    3.另一个比较重要的是这个测试中存储区块链数据的地方。默认情况下,“geth”使用“$ userhome / .etherum”作为默认数据目录。容器内部运行时,如果没有指定,则为“root”:“/root/.ethereum”。然而,这个地方在其“虚拟盘”上的容器的“内部”。使数据位于容器内保持它与主机和其他容器隔离,这不一定是我们想要的。

在这个例子中,节点需要下载整个区块链数据。这需要大量的时间,带宽和存储空间,并且在各种容器和主机之间共享这些文件可能变得非常困难。

共享数据库在运行较大的应用程序时显然是一个典型的问题,Docker在这方面提供了多种选择。在以前的Docker版本中,人们经常使用所谓的“数据容器”。这些是经典和专用容器,独立于专用于存储数据的应用程序运行时实例。当前的Docker版本通过所谓的VOLUMES取代了这个想法。在本文中,我们将使用不同的解决方案:我们将区块链和帐户数据存储在主机的磁盘上,并将目录挂载到容器中。这对于以太坊有一些优势,我们将在后面介绍。

在继续之前,让我们看看我们目前在我们的安装中有什么镜像:

接下来,让我们列出我们的容器实例是否在运行。必须通过添加“-a”命令指定活动容器:

INSPECT命令非常方便,它显示容器的整个配置和情况。

我们当前的容器以前是使用RUN命令创建的,现在我们将使用START命令重新启动实例:

“-i”代表将容器输出到我们的终端,“d8”表示容器ID,它也可以是镜像名称,不需要输入完整的ID,只要它是唯一的。

或者,我们可以在后台启动容器,并稍后连接终端。

或者:

完成这个测试,并了解了上面介绍的基本知识。下篇我们将开始区域链之旅了!

  • 版权声明: 本文源自互联网, 于2个月前,由整理发表,共 2026字。
  • 原文链接:点此查看原文