Ejecutar con Docker
En este tutorial, aprenderemos cómo construir y ejecutar los microservicios de CodeDesignPlus utilizando Docker. Veremos cómo crear imágenes Docker para cada uno de los entry points del microservicio Clients (REST, gRPC y AsyncWorker) y cómo ejecutarlos en contenedores. Esto nos permitirá desplegar y gestionar los microservicios de manera eficiente y consistente.
¿Por qué Docker?
Docker es una plataforma de contenedores que permite empaquetar aplicaciones y sus dependencias en unidades portables llamadas contenedores. El uso de Docker ofrece numerosas ventajas en el desarrollo y despliegue de microservicios:
- Portabilidad: Los contenedores se ejecutan de forma consistente en cualquier entorno que tenga Docker instalado, lo que evita problemas de incompatibilidad entre diferentes sistemas operativos y configuraciones.
- Aislamiento: Los contenedores se ejecutan de forma aislada, evitando conflictos entre diferentes aplicaciones y sus dependencias.
- Consistencia: Asegura que todos los desarrolladores y entornos de despliegue utilicen la misma versión del microservicio y sus dependencias.
- Escalabilidad: Permite gestionar y escalar los microservicios de forma más fácil y eficiente.
¿Qué Aprenderás?
- Cómo crear imágenes Docker para los entry points REST, gRPC y AsyncWorker de un microservicio.
- Cómo ejecutar los microservicios en contenedores Docker.
- Cómo configurar las variables de entorno para los contenedores Docker.
- Cómo crear una red Docker para la comunicación entre los contenedores.
Requisitos Previos
Para seguir este tutorial, necesitarás tener instalado lo siguiente:
- Ejecutar el entorno de desarrollo de CodeDesignPlus con Docker Compose que se explicó en el siguiente artículo.
- Haber completado el tutorial de Creación de un Microservicio para crear el microservicio Clients.
- Haber completado el tutorial de Soporte para gRPC
- Haber completado el tutorial de Soporte para Eventos de Dominio
Configuración
Los microservicios de CodeDesignPlus hacen uso del archivo appsettings.Docker.json
cuando la variable de entorno ASPNETCORE_ENVIRONMENT
es establecida en Docker
. En este archivo, se definen las configuraciones para la conexión a la base de datos, Redis, RabbitMQ, entre otros recursos de la infraestructura.
A continuación se muestra la configuración por defecto del archivo appsettings.Docker.json
:
{ "Redis": { "Instances": { "Core": { "ConnectionString": "host.docker.internal:6379" } } }, "RabbitMQ": { "Host": "host.docker.internal" }, "Logger": { "OTelEndpoint": "http://host.docker.internal:4317" }, "Observability": { "ServerOtel": "http://host.docker.internal:4317" }, "Vault": { "Address": "http://host.docker.internal:8200", "Mongo": { "TemplateConnectionString": "mongodb://{0}:{1}@host.docker.internal:27017" } }}
Creación de Imágenes Docker
Para poder ejecutar los microservicios en contenedores, primero debemos crear las imágenes Docker. Cada entry point (REST, gRPC y AsyncWorker) tiene un archivo Dockerfile
que describe cómo crear la imagen.
-
Entorno Desarrollo: Asegúrate de que el entorno de desarrollo de CodeDesignPlus esté en ejecución.
-
Crea la Imagen Docker para REST: Utiliza el siguiente comando para crear la imagen Docker del entry point REST.
Terminal window docker build -t ms-clients-rest . -f src/entrypoints/Acme.Net.Microservice.Clients.Rest/Dockerfile -
Crea la Imagen Docker para gRPC: Utiliza el siguiente comando para crear la imagen Docker del entry point gRPC.
Terminal window docker build -t ms-clients-grpc . -f src/entrypoints/Acme.Net.Microservice.Clients.gRpc/Dockerfile -
Crea la Imagen Docker para el Async Worker: Utiliza el siguiente comando para crear la imagen Docker del entry point AsyncWorker.
Terminal window docker build -t ms-clients-worker . -f src/entrypoints/Acme.Net.Microservice.Clients.AsyncWorker/Dockerfile
Ejecución de Contenedores Docker
Una vez que tenemos las imágenes Docker creadas, podemos ejecutar los microservicios en contenedores Docker.
-
Ejecuta el Contenedor REST: Utiliza el siguiente comando para ejecutar el microservicio REST en un contenedor.
Terminal window docker run -d -p 5000:5000 --network=backend -e ASPNETCORE_ENVIRONMENT=Docker --name ms-clients-rest ms-clients-rest -
Ejecuta el Contenedor gRPC: Utiliza el siguiente comando para ejecutar el microservicio gRPC en un contenedor.
Terminal window docker run -d -p 5001:5001 --network=backend -e ASPNETCORE_ENVIRONMENT=Docker --name ms-clients-grpc ms-clients-grpc -
Ejecuta el Contenedor AsyncWorker: Utiliza el siguiente comando para ejecutar el microservicio AsyncWorker en un contenedor.
Terminal window docker run -d -p 5002:5002 --network=backend -e ASPNETCORE_ENVIRONMENT=Docker --name ms-clients-worker ms-clients-worker
Verificación de Contenedores
Una vez que los contenedores están en ejecución, podemos verificar que todo funciona correctamente.
-
Lista los Contenedores: Utiliza el siguiente comando para listar los contenedores en ejecución o abrir Docker Desktop y seleccionar la pestaña
Containers
.Terminal window docker psDebes ver los contenedores
ms-clients-rest
,ms-clients-grpc
yms-clients-worker
en la lista. -
Prueba las APIs: Utiliza Postman para probar las APIs REST y gRPC (como se describe en el artículo anterior) o realiza peticiones al microservicio en la dirección
http://localhost:5000
para REST,http://localhost:5001
para gRPC y observa la salida en la consola del contenedor.
Conclusiones
En este tutorial, hemos aprendido cómo utilizar Docker para construir y ejecutar los microservicios de CodeDesignPlus. Hemos visto cómo crear imágenes Docker para cada entry point (REST, gRPC y AsyncWorker) del microservicio Clients, cómo ejecutarlos en contenedores, cómo configurar las variables de entorno y cómo crear una red Docker para la comunicación entre los contenedores.
Ahora, puedes desplegar tus microservicios de forma más fácil, consistente y portable en cualquier entorno que tenga Docker instalado.