Cómo ejecutar GETH desde un contenedor Docker

La instalación del cliente de nodo Ethereum en una máquina puede ser un proceso tedioso. Hay una forma más sencilla de hacerlo utilizando un cliente Docker. Esta es una guía para ejecutar el cliente de nodo GETH (Ethereum-Go) desde el interior de un contenedor Docker. GETH es la implementación GoLang del protocolo Ethereum. Hay una imagen disponible para extraer del repositorio del concentrador de Docker que puede ejecutar el entorno.

El GoEthereumsitio webenumera las siguientes imágenes disponibles con descripciones.

  • ethereum/client-go:latest es la última versión desarrollada de Geth
  • ethereum/client-go:stable es la última versión estable de Geth
  • ethereum/client-go:{version} es la versión estable de Geth en un número de versión específico
  • ethereum/client-go:release-{version} es la última versión estable de Geth en una familia de versiones específica

Los siguientes puertos se abren de forma predeterminada cuando se ejecuta desde el contenedor.

  • 8545 TCP, utilizado por la API JSON RPC basada en HTTP
  • 8546 TCP, utilizado por la API JSON RPC basada en WebSocket
  • 30303 TCP y UDP, utilizados por el protocolo P2P que ejecuta la red
  • 30304 UDP, utilizado por la nueva superposición de descubrimiento de pares del protocolo P2P

El software cliente de Docker debe estar instalado en la máquina desde la que ejecutará el contenedor. Los contenedores solo se pueden ejecutar si tiene instalado el cliente Docker. Dependiendo de su sistema operativo, se necesitará la versión correcta del cliente.

Hay versiones independientes para Windows, Linux y MacOS. El contenedor incluso se puede ejecutar en una instancia de Linux que se ejecuta en AWS, como una instalación típica de Linux. Una vez que se instala el cliente de Docker, la plataforma subyacente no importa. Los comandos serán los mismos para todos.

Obtener la imagen

Abra una terminal en Linux o MacOS, o el símbolo del sistema de PowerShell desde Windows. En el indicador de CLI, escriba el siguiente comando:

docker pull ethereum / client-go

Esto extrae la imagen de Docker del repositorio central donde fue cargada por los desarrolladores de Ethereum. Una vez que haya emitido este comando, se debe mostrar lo siguiente detallado o similar:

Ya he extraído la imagen, por lo que la información detallada puede verse diferente. Cuando emita el comando de extracción, siempre descargará la última imagen disponible, lo cual es una buena práctica.

Ejecutando el nodo

Ahora puede iniciar el nodo emitiendo el siguiente comando:

Queremos ejecutar el nodo con las opciones de bandera -i y -t para mostrar información de nuestro contenedor. La -p indica el uso de un número de puerto, en este caso 30303. Asimismo, el comando se puede ejecutar sin las banderas y simplemente usará los puertos y configuraciones predeterminados desde el interior del contenedor.

La siguiente información debería aparecer desde el terminal.

La línea INFO que muestra la configuración revela lo que ha instalado el software cliente del nodo. El cliente de nodo está ejecutando la última versión (a partir de esta publicación) del software Ethereum, que es Constantinople, que es un hard fork activado por el usuario a la altura del bloque 7280000.

Cuando se ejecuta en JSON-RPC API:

Tenga en cuenta que ejecutar la opción rpcaddr "0.0.0.0" no es seguro, ya que está abriendo su nodo a todo el tráfico. Si su billetera ETH fue desbloqueada, un hacker puede llegar a su nodo de esta manera y tomar sus monedas. No cubro la seguridad en este artículo, pero puede leer más sobre eso aquí (proteger los puertos RPC de su nodo GETH). Respete siempre las mejores prácticas y seguras.

Si el nodo muestra lo siguiente en la línea INFO, habrá un problema:

config = ”{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Bizancio: 4370000 Constantinopla: Motor: ethash}”

Constantinopla: indica que el software no se actualizó. Tampoco hay una línea para ConstantinopleFix, que aparece en la configuración correcta.

Datos persistentes

Para datos persistentes de blockchain, los volúmenes de datos de Docker deben usarse con la opción -v . El /path/on/hostdebe sustituirse por la ubicación que especifique. Para ello se debe utilizar el siguiente comando:

Comprobación del estado del nodo

Puede verificar el estado del contenedor usando el siguiente comando:

docker ps

Esto mostrará el ID del contenedor con el nombre de la imagen, el estado y los puertos utilizados.

 #These are the commands to run from the Docker CLI to run the Ethereum Go node client #GETTING THE IMAGE docker pull ethereum/client-go #RUNNING THE NODE docker run -it -p 30303:30303 ethereum/client-go #RUNNING NODE USING API docker run -it -p 8545:8545 -p 30303:30303 ethereum/client-go --rpc --rpcaddr "0.0.0.0" #Note, warning about using --rpcaddr "0.0.0.0" in a live environment. It is an insecure way of opening your node. #There are different ways to secure your ports, but this is one thing to take note of if you plan to use the API. #PERSISTENT DATA docker run -it -p 30303:30303 -v /path/on/host:/root/.ethereum ethereum/client-go

Tenga en cuenta que esto no extrae automáticamente ETH. Ese es un proceso diferente. Para obtener acceso rápido a la cadena de bloques Ethereum, este es el propósito de ejecutar GETH.

Para obtener el código fuente completo, visite: //github.com/Play3rZer0/GETHDocker.git