diff --git a/learning-objectives/data.yml b/learning-objectives/data.yml index 1b6a2280d..b96b83e70 100644 --- a/learning-objectives/data.yml +++ b/learning-objectives/data.yml @@ -486,6 +486,19 @@ data-analytics: - analysis-report - analysis-presentation +devops: + - computing-cloud-services: + - concepts-cloud-infrastructure-virtualization + - setting-up-runtime-environment + - monitoring-application-virtual-machine + - docker: + - docker-container-image + - dockerfile + - docker-commands + - container-cloud-services: + - orchestration-system-components + - configure-container-task-definitions + # New OAs since UXD006 agile-planning: - scope diff --git a/learning-objectives/intl/es.yml b/learning-objectives/intl/es.yml index d63f91b54..345203184 100644 --- a/learning-objectives/intl/es.yml +++ b/learning-objectives/intl/es.yml @@ -2003,6 +2003,104 @@ ai-prompting/open-ai-api: - title: "The chat completion object - API Reference - OpenAI API" url: https://platform.openai.com/docs/api-reference/chat/object +devops: + title: DevOps + +devops/computing-cloud-services: + title: Servicios de computación en la nube + description: Servicios de computación en la nube como AWS EC2 y Azure VM + +devops/computing-cloud-services/concepts-cloud-infrastructure-virtualization: + title: Comprender los conceptos fundamentales de la infraestructura en la nube y la virtualización + description: Describir los conceptos básicos de la infraestructura en la nube y cómo la virtualización permite la creación y gestión de máquinas virtuales + links: + - title: AWS Cloud Essentials + url: https://aws.amazon.com/getting-started/cloud-essentials/ + - title: Get started with Amazon EC2 + url: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html + +devops/computing-cloud-services/setting-up-runtime-environment: + title: Configurar el entorno de ejecución de una aplicación en una máquina virtual + description: Instalar y configurar un sistema operativo y otros servicios esenciales en una máquina virtual para ejecutar una aplicación + links: + - title: Despliegue de API NodeJS + url: https://dev.to/drsimplegraffiti/from-code-to-the-cloud-a-step-by-step-guide-to-deploying-your-nodejs-app-on-aws-ec2-4300 + - title: Despliegue API Python + url: https://www.geeksforgeeks.org/how-to-deploy-python-application-in-aws/ + - title: Despliegue de API Java + url: https://medium.com/@amitu2016/deploying-spring-boot-web-app-on-aws-using-ec2-and-s3-4db1d0f55c78 + +devops/computing-cloud-services/monitoring-application-virtual-machine: + title: Monitorear la ejecución de una aplicación en una máquina virtual + description: Utilizar herramientas de monitoreo para supervisar la ejecución de una aplicación en una máquina virtual + links: + - title: Monitor Amazon EC2 resources + url: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring_ec2.html + +devops/docker: + title: Docker + description: Docker permite empaquetar una aplicación junto con todas sus dependencias (como bibliotecas, configuraciones y archivos necesarios) en una unidad estándar conocida como contenedor + +devops/docker/docker-container-image: + title: Explicar qué es Docker, Docker container y Docker image + description: Explicar qué es Docker, Docker container y Docker image + links: + - title: What is a container? + url: https://docs.docker.com/guides/docker-concepts/the-basics/what-is-a-container/ + - title: What is an image? + url: https://docs.docker.com/guides/docker-concepts/the-basics/what-is-an-image/ + - title: What is a registry? + url: https://docs.docker.com/guides/docker-concepts/the-basics/what-is-a-registry/ + +devops/docker/dockerfile: + title: Comprender y usar las intrucciones básicas de un Dockerfile para definir una Docker image, como `FROM`, `WORKDIR`, `COPY`, `RUN` y `EXPOSE` + description: Comprender y usar las intrucciones básicas de un Dockerfile para definir una Docker image, como `FROM`, `WORKDIR`, `COPY`, `RUN` y `EXPOSE` + links: + - title: Understanding the image layers + url: https://docs.docker.com/guides/docker-concepts/building-images/understanding-image-layers/ + - title: Writing a Dockerfile + url: https://docs.docker.com/guides/docker-concepts/building-images/writing-a-dockerfile/ + - title: Build, tag, and publish an image + url: https://docs.docker.com/guides/docker-concepts/building-images/build-tag-and-publish-an-image/ + - title: Multi-stage builds + url: https://docs.docker.com/guides/docker-concepts/building-images/multi-stage-builds/ + +devops/docker/docker-commands: + title: Ejecutar comandos básicos de Docker para gestionar el ciclo de vida de un contenedor e imagen e interactuar con contenedores + description: Usar comandos como `docker build`, `docker run`, `docker ps`, `docker stop`, `docker rm`, `docker pull` y `docker push` + links: + - title: Docker CLI Reference + url: https://docs.docker.com/reference/cli/docker/ + +devops/container-cloud-services: + title: Servicio de orquestación de contenedores + description: Servicios de orquestación de contenedores en la nube como AWS ECS y Azure Container Apps + +devops/container-cloud-services/orchestration-system-components: + title: Describir los componentes clave de un sistema de orquestación, como clústeres, tareas, servicios y balanceadores de carga + description: Describir los componentes clave de un sistema de orquestación, como clústeres, tareas, servicios y balanceadores de carga + links: + - title: + url: + +devops/container-cloud-services/configure-container-task-definitions: + title: Crear y configurar definiciones de contenedor y tareas que incluyan todos los componentes necesarios para ejecutar un aplicación, como imágenes Docker, variables de entorno, volúmenes y configuraciones de red + description: Crear y configurar definiciones de contenedor y tareas que incluyan todos los componentes necesarios para ejecutar un aplicación, como imágenes Docker, variables de entorno, volúmenes y configuraciones de red + links: + - title: + url: + +devops/kubernetes: + title: Kubernetes + description: Kubernetes es una herramienta que facilita la gestión de aplicaciones contenedorizadas al automatizar el despliegue, el escalado y la recuperación ante fallos + +devops/kubernetes/kubernetes-use-cases: + title: Explicar que es Kubernetes y describir sus casos de uso y las necesidades que soluciona + description: Explicar que es Kubernetes y describir sus casos de uso y las necesidades que soluciona + links: + - title: + url: + data-analytics: title: Análisis de datos description: Validar hipótesis mediante el análisis de los datos, y proporcionar recomendaciones estratégicas basadas en tus hallazgos diff --git a/projects/05-computing-service-deployment/README.md b/projects/05-computing-service-deployment/README.md new file mode 100644 index 000000000..ddd99b00b --- /dev/null +++ b/projects/05-computing-service-deployment/README.md @@ -0,0 +1,126 @@ +# API Deployment on Computing Service + +## Índice + +- [1. Consideraciones generales](#1-consideraciones-generales) +- [2. Preámbulo](#2-preámbulo) +- [3. Resumen del proyecto](#3-resumen-del-proyecto) +- [4. Implementaciones de ejemplo](#4-Implementaciones-de-ejemplo) +- [5. Paso a paso general para el despliegue en Amazon EC2](#5-Paso-a-paso-general-para-el-despliegue-en-Amazon-EC2) +- [6. Paso a paso detallado para el despliegue en Amazon EC2](#6-Paso-a-paso-detallado-para-el-despliegue-en-Amazon-EC2) +- [7. Consideraciones para pedir tu Project Feedback](#7-Consideraciones-para-pedir-tu-Project-Feedback) +- [8. Objetivos de aprendizaje](#8-Objetivos-de-aprendizaje) + +--- + +## 1. Consideraciones generales + +- Este proyecto lo resolvemos de manera --individual--. +- El rango de tiempo estimado para completar el proyecto es de 1 a 2 Sprints. + +## 2. Preámbulo + + + +
+Virtual Machines +
+ +_Photo by_ +[_Alexandre Debiève_](https://github.com/user-attachments/assets/506d6905-593f-4774-be0a-26f28c35af9b) + +AWS EC2 es un servicio de computación en la +nube que permiten a las desarrolladoras crear, gestionar y escalar máquinas +virtuales conocidos como instancias. Proporciona una +infraestructura flexible y segura para ejecutar una amplia variedad de +aplicaciones y servicios, con características como escalabilidad, +diversidad de tipos de instancias, soporte para múltiples sistemas +operativos, opciones de pago por uso, y avanzadas configuraciones de redes +y seguridad. + +La currícula de Laboratoria incluye 4 proyectos enfocados en +desplegar la [Fleet Management API](../05-fleet-management-api/README.md) +en la nube. Cada proyecto se distingue por utilizar +diferentes métodos de despliegue, lo que te permitirá aprender y aplicar +diversas estrategias para desplegar tu aplicación en producción en un entorno real. + + + ++Ruta Devops +
+ +## 3. Resumen del proyecto + +En este proyecto desplegarás la Fleet Management API en una máquina +virtual usando **Amazon EC2**. + +En lugar de depender únicamente de tu computadora local para ejecutar aplicaciones, +tanto en Amazon EC2, puedes utilizar servidores remotos, llamados +instancias, que ofrecen más potencia y flexibilidad. Puedes elegir entre +diferentes tipos de instancias según las necesidades +de tu aplicación. Hay instancias optimizadas para tareas que requieren +mucha memoria, mucho procesamiento, almacenamiento rápido, etc. Puedes conectarte +a tu instancia desde tu computadora local usando herramientas como SSH +(para Linux) o Remote Desktop (para Windows). Una vez conectada, +puedes usar la instancia como lo harías con tu computadora local: +instalar software, subir código, ejecutar aplicaciones, etc. + +## 4. Implementaciones de ejemplo + +En caso que no hayas implementado aún la +[Fleet Management API](../05-fleet-management-api/README.md) +puedes usar las siguientes implementaciones mínimas para +completar este proyecto. Elige la implementación en el +lenguaje de programación que más te interese: + +- [Implementación en NodeJS](https://github.com/Laboratoria/minimum-impl-fleet-management-api-nodejs) +- [Implementación en Python](https://github.com/Laboratoria/minimum-impl-fleet-management-api-python) +- [Implementación en Java](https://github.com/Laboratoria/minimum-impl-fleet-management-api-java) + +## 5. Paso a paso general para el despliegue en Amazon EC2 + +Podemos seguir el siguiente paso a paso general para +desplegar la Fleet Management API independientemente del lenguaje de +programación en que esta implementada. + +- Paso 1: Crear una cuenta en el proveedor de infraestructura +- Paso 2: Lanzar una máquina virtual +- Paso 3: Configurar la máquina virtual +- Paso 4: Conectar a la máquina virtual desde tu computadora usando SSH +- Paso 5: Instalar las dependencias de la API en la máquina virtual +- Paso 6: Subir el código de tu API en la máquina virtual +- Paso 7: Configurar y ejecutar la API en la máquina virtual +- Paso 8: Probar la API desde tu computadora + +## 6. Paso a paso detallado para el despliegue en Amazon EC2 + +El paso a paso detallado para el despliegue en Amazon EC2 +depende del lenguaje de implementacion de la API. Te +sugerimos las siguientes guías: + +- [Despliegue de API NodeJS](https://dev.to/drsimplegraffiti/from-code-to-the-cloud-a-step-by-step-guide-to-deploying-your-nodejs-app-on-aws-ec2-4300) +- [Despliegue API Python](https://www.geeksforgeeks.org/how-to-deploy-python-application-in-aws/) +- [Despliegue de API Java](https://medium.com/@amitu2016/deploying-spring-boot-web-app-on-aws-using-ec2-and-s3-4db1d0f55c78) + +## 7. Consideraciones para pedir tu Project Feedback + +Antes de agendar tu Project Feedback con tu coach, asegúrate de +tener una coleccion de Postman para probar la API que +desplegaste en Amazon EC2. + +## 8. Objetivos de aprendizaje + +> ℹ️ Esta sección será automáticamente generada en el idioma pertinente, a partir +> de los objetivos de aprendizaje declarados en [`project.yml`](./project.yml), +> al crear el repo del proyecto para un cohort en particular usando +> [`./scripts/create-cohort-project.js`](../../scripts#create-cohort-project-coaches). +> +> Acá puedes ver una [lista de todos los objetivos de aprendizaje](../../learning-objectives/data.yml) +> que contempla nuestra currícula. diff --git a/projects/05-computing-service-deployment/project.yml b/projects/05-computing-service-deployment/project.yml new file mode 100644 index 000000000..1644b23a3 --- /dev/null +++ b/projects/05-computing-service-deployment/project.yml @@ -0,0 +1,5 @@ +track: web-dev +tags: + - featured +learningObjectives: + - devops/computing-cloud-services diff --git a/projects/05-container-service-deployment/README.md b/projects/05-container-service-deployment/README.md new file mode 100644 index 000000000..c7c4503dc --- /dev/null +++ b/projects/05-container-service-deployment/README.md @@ -0,0 +1,156 @@ +# API Deployment on Container Service + +## Índice + +- [1. Consideraciones generales](#1-consideraciones-generales) +- [2. Preámbulo](#2-preámbulo) +- [3. Resumen del proyecto](#3-resumen-del-proyecto) +- [4. Paso a paso general para el despliegue en Amazon ECS](#4-Paso-a-paso-general-para-el-despliegue-en-Amazon-ECS) +- [5. Paso a paso detallado para el despliegue en Amazon ECS](#5-Paso-a-paso-detallado-para-el-despliegue-en-Amazon-ECS) +- [6. Consideraciones para pedir tu Project Feedback](#6-Consideraciones-para-pedir-tu-Project-Feedback) +- [7. Objetivos de aprendizaje](#7-Objetivos-de-aprendizaje) + +--- + +## 1. Consideraciones generales + +- Para poder implementar este proyecto debes implementar primer +el [API Deployment with Docker](../05-dockerfile-deployment/README.MD). +- Este proyecto lo resolvemos de manera --individual--. +- El rango de tiempo estimado para completar el proyecto es de 1 a 2 Sprints. + +## 2. Preámbulo + + + ++Contenedores +
+ +_Photo by_ +[Frank Mckenna](https://unsplash.com/@frankiefoto?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash) + +AWS ECS (Elastic Container Service) es un servicio +diseñado para simplificar el despliegue y la gestión de aplicaciones basadas +en contenedores, permitiendo a las desarrolladoras centrarse en el código en +lugar de la infraestructura. Ambos proporcionan escalabilidad automática, +gestionando la capacidad de los recursos según la demanda de la aplicación. +Además se integra de manera eficiente +con otros servicios de AWS, facilitando +una experiencia cohesiva y flexible para construir y desplegar aplicaciones +en la nube. + +La currícula de Laboratoria incluye 4 proyectos enfocados en +desplegar la [Fleet Management API](../05-fleet-management-api/README.md) +en la nube. Cada proyecto se distingue por utilizar +diferentes métodos de despliegue, lo que te permitirá aprender y aplicar +diversas estrategias para desplegar tu aplicación en producción en un entorno real. + + + ++Ruta Devops +
+ +## 3. Resumen del proyecto + +En este proyecto desplegarás la aplicación usando +**Amazon Elastic Container Service (ECS)**. + +Para este proyecto necesitarás la imagen Docker que construiste +en el proyecto [API Deployment on Docker File](../05-dockerfile-deployment/README.MD). +Si aún no la tienes, por favor implementa primero este proyecto. + +## 4. Paso a paso general para el despliegue en Amazon ECS + +Podemos seguir el siguiente paso a paso general para +desplegar la Fleet Management API independientemente del lenguaje de +programación en que esta implementada + +- Paso 1: Subir la imagen docker a un Registro de Contenedores +(Amazon ECR) +- Paso 2: Desplegar la aplicación en Amazon ECS creando un cluster EC2, + definiendo una tarea ECS y un servicio ECS. +- Paso 3: Configurar el acceso externo para acceder a tu API utilizando la + URL pública proporcionada por AWS. +- Paso 4: Monitorizar y gestionar la aplicación + +## 5. Paso a paso detallado para el despliegue en Amazon ECS + +### 1. Sube la imagen Docker a Amazon ECR (Elastic Container Registry) + +Amazon ECR es un servicio en la nube que te permite almacenar tus imágenes +Docker de forma segura y eficiente. Amazon ECR actúa como un +"repositorio" para imágenes Docker, similar a cómo GitHub actúa como un +repositorio para código fuente. ECR se integra fácilmente con otros servicios de +AWS, como Amazon ECS (Elastic Container Service). Esto simplifica el despliegue de +tus aplicaciones en contenedores dentro del entorno de AWS. + +En este proyecto almacenaremos en Amazon ECR la imagen docker que hemos +definido para empaquetar nuesta aplicación. Tómate un tiempo +para familiarizarte con ECR. Puedes seguir el +[tutorial oficial de ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html) +o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +- [ ] ¿Cómo creas un repositorio en Amazon ECR? +- [ ] ¿Cómo te autenticas en Amazon ECR desde tu máquina local? +- [ ] ¿Cómo subes una imagen Docker a Amazon ECR? +- [ ] ¿Cómo gestionas las imágenes en Amazon ECR? +- [ ] ¿Cómo haces `pull` a tu computadora de una imágen subida a Amazon ECR? + +Finalmente, sube la imagen Docker que constuiste para empaquetar tu +aplicación en un repositorio de Amazon ECR. + +### 2. Crear un clúster tipo EC2, una tarea y servicio en ECS + +El siguiente paso es entonces desplegar la imagen docker +en cluster de instancias EC2 usando Amazon ECS (Elastic Container Service). + +Tómate un tiempo para familiarizarte con ECS. Puedes seguir el +[workshop oficial de ECS](https://ecsworkshop.com/introduction/) +o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +- [ ] ¿Cómo se crea un clúster en Amazon ECS? +- [ ] ¿Qué es una tarea en ECS y cómo se configura? +- [ ] ¿Qué es un servicio en ECS y cómo garantiza que las tareas + se mantengan en funcionamiento? +- [ ] ¿Cómo se despliega un servicio en ECS? +- [ ] ¿Qué es el autoescalado en ECS y cómo se configura? +- [ ] ¿Cómo se integra ECS con otros servicios de AWS como ECR? +- [ ] ¿Cómo se realiza un despliegue de una nueva versión de una aplicación + utilizando ECS? +- [ ] ¿Cómo solucionas problemas si tu aplicación en Amazon ECS no se está + ejecutando correctamente? + +Finalmente, usa ECS para desplegar la imagen docker de tu aplicacion +creando un clúster, una tarea y un servicio. + +### 3. Monitorizar y gestionar la aplicación + +Usa la la IP pública de tu clúster EC2 para probar tu API con una +coleccion de Postman. Puedes utilizar esta +[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). + +## 6. Consideraciones para pedir tu Project Feedback + +Antes de agendar tu Project Feedback con tu coach, asegúrate de +tener una coleccion de Postman para probar la API que +desplegaste en Amazon ECS. + +## 7. Objetivos de aprendizaje + +> ℹ️ Esta sección será automáticamente generada en el idioma pertinente, a partir +> de los objetivos de aprendizaje declarados en [`project.yml`](./project.yml), +> al crear el repo del proyecto para un cohort en particular usando +> [`./scripts/create-cohort-project.js`](../../scripts#create-cohort-project-coaches). +> +> Acá puedes ver una [lista de todos los objetivos de aprendizaje](../../learning-objectives/data.yml) +> que contempla nuestra currícula. diff --git a/projects/05-container-service-deployment/project.yml b/projects/05-container-service-deployment/project.yml new file mode 100644 index 000000000..2223cb455 --- /dev/null +++ b/projects/05-container-service-deployment/project.yml @@ -0,0 +1,5 @@ +track: web-dev +tags: + - featured +learningObjectives: + - devops/container-cloud-services diff --git a/projects/05-dockerfile-deployment/README.md b/projects/05-dockerfile-deployment/README.md new file mode 100644 index 000000000..77a00459e --- /dev/null +++ b/projects/05-dockerfile-deployment/README.md @@ -0,0 +1,168 @@ +# API Deployment with Docker + +## Índice + +- [1. Consideraciones generales](#1-consideraciones-generales) +- [2. Preámbulo](#2-preámbulo) +- [3. Resumen del proyecto](#3-resumen-del-proyecto) +- [4. Implementaciones de ejemplo](#4-Implementaciones-de-ejemplo) +- [5. Paso a paso para empaquetar tu aplicación en un contenedor de Docker](#5-Paso-a-paso-para-empaquetar-tu-aplicación-en-un-contenedor-de-Docker) +- [6. Consideraciones para pedir tu Project Feedback](#6-Consideraciones-para-pedir-tu-Project-Feedback) +- [7. Objetivos de aprendizaje](#7-Objetivos-de-aprendizaje) + +--- + +## 1. Consideraciones generales + +- Este proyecto lo resolvemos de manera --individual--. +- El rango de tiempo estimado para completar el proyecto es de 1 a 2 Sprints. + +## 2. Preámbulo + + + ++Logo de Docker +
+ +Docker permite empaquetar una aplicación junto con todas sus dependencias +(como bibliotecas, configuraciones y archivos necesarios) en una unidad +estándar conocida como contenedor. Esto asegura que la aplicación funcione +de manera consistente sin importar dónde se ejecute, ya sea en una máquina local, +en la nube o en un servidor de producción. A diferencia de las máquinas virtuales, +los contenedores no necesitan un sistema operativo completo, sino que comparten +el núcleo del sistema operativo del host, lo que los hace más eficientes en términos +de recursos y más rápidos de iniciar. + +La currícula de Laboratoria incluye 4 proyectos enfocados en +desplegar la [Fleet Management API](../05-fleet-management-api/README.md) +en la nube. Cada proyecto se distingue por utilizar +diferentes métodos de despliegue, lo que te permitirá aprender y aplicar +diversas estrategias para desplegar tu aplicación en producción en un entorno real. + + + ++Ruta Devops +
+ +## 3. Resumen del proyecto + +En este proyecto empaquetarás la [Fleet Management API](../05-fleet-management-api/README.md) +en un **contenedor de Docker** a través de un Dockerfile. + +## 4. Implementaciones de ejemplo + +En caso que no hayas implementado aún la +[Fleet Management API](../05-fleet-management-api/README.md) +puedes usar las siguientes implementaciones mínimas para +completar este proyecto. Elige la implementación en el +lenguaje de programación que más te interese: + +- [Implementación en NodeJS](https://github.com/Laboratoria/minimum-impl-fleet-management-api-nodejs) +- [Implementación en Python](https://github.com/Laboratoria/minimum-impl-fleet-management-api-python) +- [Implementación en Java](https://github.com/Laboratoria/minimum-impl-fleet-management-api-java) + +## 5. Paso a paso para empaquetar tu aplicación en un contenedor de Docker + +### 1. Familiarizate con Docker + +Docker es una herramienta que se usa para crear, desplegar y ejecutar +aplicaciones en contenedores. Por lo tanto es importante +que aprendas a administrar contenedores. Tómate un tiempo +para familiarizarte con Docker. Puedes seguir el +[tutorial oficial de Docker](https://www.docker.com/101-tutorial/) o cualquier +otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +- [ ] ¿Qué es un contenedor? +- [ ] ¿Qué es una Docker Image? +- [ ] ¿Qué es un Image Registry? +- [ ] ¿Cómo ejecutar un contenedor? +- [ ] ¿Cómo detener un contenedor? +- [ ] ¿Cómo publicar un puerto de un contenedor? +- [ ] ¿Cómo ejecutar un comando dentro de un contenedor? +- [ ] ¿Qué es un Dockerfile? +- [ ] En un Dockerfile, ¿para qué sirve el comando FROM? +- [ ] En un Dockerfile, ¿para qué sirve el comando EXPOSE? +- [ ] En un Dockerfile, ¿para qué sirve el comando USE? +- [ ] En un Dockerfile, ¿para qué sirve el comando RUN? +- [ ] En un Dockerfile, ¿para qué sirve el comando WORKDIR? +- [ ] En un Dockerfile, ¿para qué sirve el comando COPY? +- [ ] En un Dockerfile, ¿para qué sirven los comandos CMD y ENTRYPOINT? +- [ ] En un Dockerfile, ¿para qué sirve el comando ENV? +- [ ] ¿Cómo compartir imágenes en Docker Github? + +### 2. Construye una imagen Docker con Dockerfile + +Una vez estes familiarizada con Docker, el siguiente paso es escribir +un Dockerfile para construir una imagen que empaquete tu API. +Puedes seguir este [tutorial](https://medium.com/@anshita.bhasin/a-step-by-step-guide-to-create-dockerfile-9e3744d38d11) +o cualquier otro disponible en internet. + +Para escribir un `Dockerfile` adecuado que empaquete una aplicación, +es importante responder a varias preguntas clave sobre tu aplicación y su entorno. +Aquí tienes una lista de preguntas a considerar: + +1. ¿Cuál es el lenguaje de programación y entorno de ejecución de tu aplicación? +2. ¿Cuál es el sistema operativo preferido o requerido? +3. ¿En qué directorio está ubicado el código fuente de tu aplicación? ¿Necesitas +copiar todo el directorio o solo ciertos archivos? +4. ¿Qué herramientas o paquetes necesitas instalar para que tu aplicación funcione? +¿Usas un archivo como `package.json` (Node.js), `requirements.txt` (Python), +`pom.xml` (Maven, Java) o `build.gradle` (Gradle, Java)? +5. ¿Cuál es el punto de entrada de tu aplicación? ¿Qué comando necesitas ejecutar +para iniciar tu aplicación? +6. ¿En qué puerto(s) escucha tu aplicación para recibir conexiones? Esto es necesario +para la instrucción `EXPOSE`. +7. ¿Existen variables de entorno que deban configurarse para que tu aplicación +funcione correctamente? +8. ¿Hay datos que deben mantenerse persistentes entre reinicios de contenedores? +Si es así, puedes necesitar configurar volúmenes. +9. ¿Existen permisos o configuraciones del sistema que deban aplicarse para que tu +aplicación se ejecute correctamente? +10. ¿Necesitas realizar alguna configuración específica o ejecución de scripts antes +de que tu aplicación esté lista? + +Con ayuda de las respuestas a estas preguntas escribe un Dockerfile +que empaquete tu aplicación con todas sus dependencias, configure el +entorno de trabajo y exponga el puerto necesario, asegurando que la +aplicación esté lista para ejecutarse en un contenedor Docker. + +Luego construye la imagen Docker desde el Dockerfile (`docker build`) y ejecuta +un contenedor basado en la imagen construida (`docker run`). + +Prueba que la API funcione correctamente desde una colección de Postman. +Puedes utilizar esta +[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). + +### 3. Publica tu Imagen en Docker Hub + +Crea una cuenta en Docker Hub e inicia sesión desde tu terminal (`docker login`). +Etiqueta tu imagen Docker (`docker tag`) y publícala en Docker Hub (`docker push`) +para su distribución y uso. + +## 6. Consideraciones para pedir tu Project Feedback + +Antes de agendar tu Project Feedback con tu coach, asegúrate de: + +- [ ] Hacer push del Dockerfile al repositorio de proyecto Fleet Management API +- [ ] Construir una colección de Postman para probar la API. +Puedes utilizar esta +[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). + +## 7. Objetivos de aprendizaje + +> ℹ️ Esta sección será automáticamente generada en el idioma pertinente, a partir +> de los objetivos de aprendizaje declarados en [`project.yml`](./project.yml), +> al crear el repo del proyecto para un cohort en particular usando +> [`./scripts/create-cohort-project.js`](../../scripts#create-cohort-project-coaches). +> +> Acá puedes ver una [lista de todos los objetivos de aprendizaje](../../learning-objectives/data.yml) +> que contempla nuestra currícula. diff --git a/projects/05-dockerfile-deployment/project.yml b/projects/05-dockerfile-deployment/project.yml new file mode 100644 index 000000000..81789a98f --- /dev/null +++ b/projects/05-dockerfile-deployment/project.yml @@ -0,0 +1,5 @@ +track: web-dev +tags: + - featured +learningObjectives: + - devops/docker