Este proyecto utiliza Docker para encapsular el entorno de desarrollo y asegurar que las dependencias y herramientas funcionen de manera consistente en cualquier máquina, evitando problemas de configuración local. Docker nos permite gestionar entornos reproducibles y simplificar el flujo de trabajo para desarrolladores en diferentes sistemas operativos.
- Motivaciones para usar Docker
- Herramientas utilizadas en este proyecto
- Cómo construir la imagen con Docker Compose
- Volúmenes
- Otros comandos útiles
- Conclusión
- Consistencia: Al usar Docker, garantizamos que todos los desarrolladores usen el mismo entorno, eliminando los típicos "funciona en mi máquina".
- Portabilidad: Podemos mover nuestro proyecto a cualquier entorno sin necesidad de reinstalar dependencias o configurar el sistema.
- Aislamiento: Docker aísla las dependencias y herramientas del sistema operativo anfitrión, previniendo conflictos y simplificando la configuración.
- Compatibilidad multiplataforma: Docker permite que las aplicaciones se ejecuten en entornos diferentes, ya sea Linux, Windows o MacOS, sin complicaciones.
Este proyecto utiliza varias herramientas para el desarrollo en Solana y Anchor, instaladas y configuradas dentro del contenedor Docker:
- Anchor CLI: Framework para el desarrollo de programas en Solana.
- Solana CLI: Herramienta de línea de comandos de Solana para interactuar con la blockchain.
- Rust: Lenguaje de programación utilizado en Solana.
- Node Version Manager (NVM): Herramienta para gestionar versiones de Node.js, utilizada junto con Yarn para el manejo de dependencias en algunos módulos.
-
Clonar el repositorio:
git clone https://github.com/dzkita/solana-docker cd solana-docker -
Construir y ejecutar los contenedores con Docker Compose:
docker-compose up --build
Este comando construirá la imagen Docker y levantará el contenedor asociado a nuestro proyecto.
-
Ejecutar en segundo plano (opcional):
docker-compose up -d
Esto ejecutará los servicios en segundo plano.
Docker Compose nos permite especificar la plataforma en la que se ejecutará el contenedor. Esto es particularmente útil cuando desarrollamos en sistemas operativos diferentes, como Windows.
A continuación se muestra un ejemplo del archivo docker-compose.yml donde se define la plataforma:
version: '3.8'
services:
localnet:
image: docker-sol
build:
context: ./docked-sol
platform: linux/amd64
ports:
- "8899:8899"
- "8900:8900"
- "9900:9900"
volumes:
- ./projects:/work/projects
command: bash
stdin_open: true
tty: trueEn algunos entornos, como Windows, puede que necesites especificar la plataforma linux/amd64 o linux/arm64 dependiendo del procesador:
version: '3.8'
services:
localnet:
image: docker-sol
build:
context: ./docked-sol
platform: linux/amd64 # Especifica la plataforma compatible con Windows
ports:
- "8899:8899"
- "8900:8900"
- "9900:9900"
volumes:
- ./projects:/work/projects
command: bash
stdin_open: true
tty: trueSi estás utilizando un procesador ARM en un dispositivo Windows más reciente, también podrías cambiar a linux/arm64.
En este proyecto, el uso de volúmenes es fundamental para mantener el código del proyecto accesible tanto dentro como fuera del contenedor. Todos los proyectos de Solana deben estar dentro de la carpeta projects, ubicada en el mismo directorio que el archivo docker-compose.yml. Esto asegura que tu código fuente sea persistente y accesible desde el contenedor para ser utilizado por las herramientas de Solana y Anchor.
En el archivo docker-compose.yml, hemos configurado el volumen como sigue:
volumes:
- ./projects:/work/projects./projects: Esta es la carpeta local donde debes colocar tus proyectos de Solana. El contenedor la monta en el directorio/work/projects./work/projects: Es la ruta dentro del contenedor donde el proyecto estará disponible. Cualquier cambio en los archivos dentro de./projectsen tu máquina local se verá reflejado dentro del contenedor, lo que facilita el desarrollo.
- Persistencia de datos: Los cambios en los archivos no se pierden cuando el contenedor se reinicia.
- Desarrollo interactivo: Puedes editar tu código en tu editor local y esos cambios se aplicarán automáticamente en el contenedor.
- Simplicidad: No necesitas copiar archivos manualmente al contenedor, ya que todo lo que esté en la carpeta
projectsestará disponible dentro del contenedor.
-
Detener todos los servicios:
docker-compose down
-
Ver logs de los servicios:
docker-compose logs -f
-
Reconstruir las imágenes si hay cambios en el
Dockerfileo el código:docker-compose up --build