Modos de Operación
Contenedores en Segundo Plano vs. Interactivos
Los contenedores de Docker pueden ejecutarse de manera interactiva (usando las banderas -it
) o en un estado de fondo y separado (usando la bandera -d
). Muchos de los comandos de ejemplo a continuación utilizan las banderas -it
para ayudar en la depuración, pero en muchos casos, solo querrás ejecutar un nodo en segundo plano. Se recomienda que utilices las guías en docker para familiarizarte con su uso.
Modo efímero
El modo efímero se proporciona para admitir entornos de desarrollo y pruebas. Cada vez que inicias un contenedor en modo efímero, la base de datos comienza vacía y se utilizará un archivo de configuración predeterminado para la red adecuada.
Iniciar un nodo efímero es simple, solo elabora un comando docker run
para lanzar la imagen adecuada, pero no montes un volumen. Para elaborar tu comando de docker, necesitas el nombre de la red que planeas usar y las banderas para exponer los puertos que deseas que estén disponibles (consulta la sección llamada "Puertos" a continuación para aprender sobre la exposición de puertos). Así, lanzar un nodo de testnet mientras expones Horizon sería:
docker run --rm -it -p "8000:8000" --name stellar stellar/quickstart --testnet
Como parte del lanzamiento, un contenedor en modo efímero generará una contraseña aleatoria para asegurar el servicio de postgresql y la mostrará en la salida estándar. Puedes usar esta contraseña (siempre que hayas expuesto el puerto de postgresql) para acceder a la base de datos de postgresql en ejecución.
Modo persistente
En comparación con el modo efímero, el modo persistente es más complicado de operar, pero también más poderoso. El modo persistente utiliza un volumen de host montado, un directorio en la máquina host que se expone al contenedor de docker en ejecución, para almacenar todos los datos de la base de datos así como los archivos de configuración utilizados para ejecutar servicios. Esto te permite gestionar y modificar estos archivos desde el sistema host.
Nota que no hay garantía de que la organización de los archivos del volumen permanezca consistente entre las versiones de la imagen que ocurren en cada commit al repositorio stellar/quickstart. En cualquier momento se pueden añadir nuevos archivos, eliminar archivos antiguos, o cambiar las dependencias y referencias entre ellos. Por esta razón, el modo persistente está destinado principalmente a ejecutar instancias de prueba de corta duración para desarrollo. Si se necesita consistencia durante un período de tiempo, utiliza referencias de digest de imagen para fijar a una compilación específica.
Iniciar un contenedor en modo persistente es igual que en modo efímero con una excepción:
docker run --rm -it -p "8000:8000" -v "/home/scott/stellar:/opt/stellar" --name stellar stellar/quickstart --testnet
La opción -v
en el ejemplo anterior le dice a docker que monte el directorio del host /home/scott/stellar
en el contenedor en la ruta /opt/stellar
. Puedes personalizar el directorio del host a cualquier ubicación que desees, simplemente asegúrate de usar el mismo valor cada vez que inicies el contenedor. También nota: se requiere una ruta de directorio absoluta. La segunda parte del montaje de volumen (/opt/stellar
) nunca debe ser cambiada. Este directorio especial es verificado por el contenedor para ver si está montado desde el sistema host, lo cual se usa para determinar si debemos iniciar en modo efímero o persistente.
Al lanzar un contenedor en modo persistente por primera vez, el script de lanzamiento notará que el volumen montado está vacío. Esto desencadenará un proceso de inicialización interactivo para completar la configuración inicial para el contenedor. Esta inicialización interactiva añade algunas complicaciones al proceso de configuración porque en la mayoría de los casos no querrás ejecutar el contenedor interactivamente durante la operación normal, sino más bien en segundo plano. Recomendamos los siguientes pasos para configurar un nodo en modo persistente:
- Ejecuta una sesión interactiva del contenedor al principio, asegurándote de que todos los servicios inicien y funcionen correctamente.
- Apaga el contenedor interactivo (usando Ctrl-C).
- Inicia un nuevo contenedor usando el mismo directorio del host en segundo plano.