Saltar al contenido principal

Usar Docker para crear y ejecutar dapps

¿Qué es Docker?

Bienvenido al mundo de Docker, una herramienta esencial para el desarrollo de software. Docker empaqueta software en unidades conocidas como contenedores, asegurando consistencia, aislamiento, portabilidad y escalabilidad.

Docker es particularmente útil en el desarrollo de dapps. Ayuda a gestionar microservicios, mantener entornos consistentes a lo largo de las etapas de desarrollo y simular una red descentralizada durante las pruebas.

Entender Docker comienza con entender las imágenes y contenedores de Docker. Una imagen de Docker, creada a partir de un Dockerfile, es un paquete que contiene todo lo necesario para ejecutar el software. Un contenedor de Docker es una instancia en ejecución de esta imagen.

Construir y Ejecutar una Imagen de Docker

Puedes crear una imagen de Docker usando el comando docker build con un Dockerfile. Una vez que la imagen está creada, puedes ejecutar un contenedor de Docker usando el comando docker run.

En el contexto de los dapps de ejemplo Soroban, entender cómo construir imágenes de Docker es crucial. Las imágenes de Docker sirven como la base para nuestro contenedor, que proporciona el entorno para que nuestro dapp se ejecute.

Aquí tienes un ejemplo de nuestro ejemplo

Para ilustrar el proceso, tomemos un ejemplo de nuestra ejemplo de dapp de crowdfunding. Para construir la imagen de Docker, utilizas un comando que está encapsulado dentro de nuestro Makefile:

make build-docker

Este comando simplifica el proceso de construcción de Docker y asegura que se ejecute de manera consistente cada vez. Cuando ejecutas make build-docker, Docker ejecuta las siguientes instrucciones:

docker build . \
--tag soroban-preview:11 \
--force-rm \
--rm

Descripción General del Makefile

docker build .

Instruye a Docker para construir una imagen usando el Dockerfile en el directorio actual (indicado por el ".").

--tag soroban-preview:11

Asigna un nombre y una etiqueta a nuestra imagen, en este caso, soroban-preview con la etiqueta 9.

--force-rm

Asegura que Docker elimine cualquier contenedor intermedio después de que finalice el proceso de construcción. Esto mantiene nuestro entorno limpio.

--rm

Garantiza la eliminación del contenedor intermedio, incluso si la construcción falla. Al usar make build-docker, estás aprovechando el poder de Docker para crear un entorno consistente y confiable para nuestro dapp.

Despliegue de Contenedores

Puedes agilizar el proceso de despliegue utilizando un script para ejecutar el contenedor de Docker. El siguiente script es un envoltorio para la stellar/quickstart imagen de Docker, que proporciona una forma rápida de ejecutar una red Stellar. Puedes encontrar un ejemplo del script quickstart.sh ubicado en el directorio raíz de la ejemplo de dapp de crowdfunding.

quickstart.sh
#!/bin/bash

set -e

case "$1" in
standalone)
echo "Using standalone network"
ARGS="--standalone"
;;
futurenet)
echo "Using Futurenet network"
ARGS="--futurenet"
;;
*)
echo "Usage: $0 standalone|futurenet"
exit 1
;;
esac

shift

# Run the soroban-preview container
# Remember to do:
# make build-docker

echo "Creating docker soroban network"
(docker network inspect soroban-network -f '{{.Id}}' 2>/dev/null) \
|| docker network create soroban-network

echo "Searching for a previous soroban-preview docker container"
containerID=$(docker ps --filter="name=soroban-preview" --all --quiet)
if [[ ${containerID} ]]; then
echo "Start removing soroban-preview container."
docker rm --force soroban-preview
echo "Finished removing soroban-preview container."
else
echo "No previous soroban-preview container was found"
fi

currentDir=$(pwd)
docker run -dti \
--volume ${currentDir}:/workspace \
--name soroban-preview \
-p 8001:8000 \
--ipc=host \
--network soroban-network \
soroban-preview:11

# Run the stellar quickstart image

docker run --rm -ti \
--name stellar \
--network soroban-network \
-p 8000:8000 \
stellar/quickstart:testing \
$ARGS \
--enable-soroban-rpc \
"$@" # Pass through args from the CLI

El script quickstart.sh configura el entorno de Docker para ejecutar el dapp. Te permite elegir entre una red independiente o la red Futurenet. El script realiza los siguientes pasos:

  • Determina la red en función del argumento proporcionado (standalone o futurenet).
  • Crea la red de Docker llamada soroban-network si no existe.
  • Elimina cualquier contenedor de Docker soroban-preview existente.
  • Ejecuta el contenedor soroban-preview, que proporciona el entorno para el desarrollo de Soroban Preview.
  • Ejecuta la imagen de Docker stellar/quickstart, que configura la red Stellar utilizando el tipo de red elegido y habilita Stellar RPC.