Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Glab - S05 - Dapaza - 2024-02

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 20

Desarrollo de Soluciones en la Nube

Desarrollo de Soluciones en la Nube

LABORATORIO 05

Contenedores Microservicios II

CODIGO DEL CURSO:

Alumno(s) Deivid Jhon Del Carpio Vilca Not


: a

Grupo: C Ciclo: V
Requiere No Puntaj
Excele Regul
Bueno mejora acept e
Criterio de Evaluación nte ar
(3pts) (1pts) . Lograd
(4pts) (2pts)
(0pts) o
Configura proyectos con múltiples
4
contenedores utilizando el servicio de
docker-compose
Utiliza comandos Docker para
4
verificar imágenes y contenedores
creados con docker-compose
Accede a múltiples contenedores y
4
verifica su correcto funcionamiento
Realiza observaciones y conclusiones
3
que aporten un opinión crítica y
técnica
Es puntual y redacta el informe
2
adecuadamente sin copias de otros
autores
Evidencia avance en la sesión de
3
laboratorio

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 1


Desarrollo de Soluciones en la Nube

LABORATORIO

Objetivos:

• Crea imágenes a partir de dockerfile


• Crea múltiples imágenes y contenedores utilizando docker-compose

Equipos, Materiales, Programas y Recursos:

● Computadora personal.

Introducción:

En el presente laboratorio se propondrán maneras de implementar contenedores Docker.

Seguridad:

● Ubicar maletines y/o mochilas en el gabinete al final de aula de


laboratorio.
● No ingresar con líquidos ni comida al aula de laboratorio.
● Al culminar la sesión de laboratorio, apagar correctamente la
computadora.

Procedimiento y Resultados:

El laboratorio será desarrollado en forma individual.

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 2


Desarrollo de Soluciones en la Nube

Desarrollo del Laboratorio

Paso 1: Clonar el proyecto y modificar las dependencias

1. Clone el repositorio remoto que contiene un proyecto demo desarrollado en node y


mongodb

git clone https://github.com/deahdennis/proyecto-delivery-node-


mongodb.git app_node

Evidencia

2. Ingrese a la carpeta app_node

cd app_node

3. Agregue al archivo package.json la siguiente dependencia(no elimine la información


que ya contiene)

"devDependencies": {
"nodemon": "^1.18.10"
}

Evidencia

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 3


Desarrollo de Soluciones en la Nube

Paso 2: Configurar aplicación para que funcione con contenedores

4. Modifique el archivo app.js con el siguiente contenido (no elimine el código del archivo)

const port = process.env.PORT || 8080;


app.listen(port, function () {
console.log(`Example app listening on ${port}!`);
});

Evidencia

5. Modifique el archivo db.js como se muestra

---antes ----
const MONGO_USERNAME = 'userdemo';
const MONGO_PASSWORD = 'Tecsup';
const MONGO_HOSTNAME = '127.0.0.1';
const MONGO_PORT = '27017';
const MONGO_DB = 'deliverydb';

---después ----

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 4


Desarrollo de Soluciones en la Nube

const {
MONGO_USERNAME,
MONGO_PASSWORD,
MONGO_HOSTNAME,
MONGO_PORT,
MONGO_DB
} = process.env;

Evidencia

6. Se creara un archivo para definir variables de acceso global. En la raíz de su proyecto


cree el archivo .env y agregue el siguiente contenido

MONGO_USERNAME=userdemo
MONGO_PASSWORD=Tecsup
MONGO_PORT=27017
MONGO_DB=deliverydb

Evidencia

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 5


Desarrollo de Soluciones en la Nube

7. Agregue al archivo .dockerignore la omisión del archivo .env

.env

Evidencia

8. Edite el archivo db.js y agregue el método de opciones de conexión y de conexión

const options = {
useNewUrlParser: true,
reconnectTries: Number.MAX_VALUE,
reconnectInterval: 500,
connectTimeoutMS: 10000,
};

mongoose.connect(url, options).then( function() {


console.log('MongoDB is connected');
})
.catch( function(err) {
console.log(err);
});

Evidencia

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 6


Desarrollo de Soluciones en la Nube

9. En la raíz de su proyecto cree un archivo denominado: wait-for.sh .Desde la URL del


repositorio que se indica, copie el contenido del archivo remoto dentro del archivo
creado.(Este archivo nos permitirá ejecutar el servicio de bade de datos )

https://github.com/eficode/wait-for/blob/master/wait-for

Evidencia

10. Para que sea ejecutable conceda los permisos de ejecución

chmod +x wait-for.sh

Evidencia

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 7


Desarrollo de Soluciones en la Nube

Paso 3: Trabajar con docker-compose

11. Para la configuración de docker-compose se utilizara su documentación oficial en su


versión 3

https://docs.docker.com/compose/compose-file/compose-file-v3/

12. En la raíz de su proyecto cree el archivo docker-compose.yml con el siguiente


contenido

version: '3'

services:
nodejs:
build:
context: .
dockerfile: Dockerfile
image: nodejs
container_name: nodejs
restart: unless-stopped
env_file: .env
environment:
- MONGO_USERNAME=$MONGO_USERNAME
- MONGO_PASSWORD=$MONGO_PASSWORD
- MONGO_HOSTNAME=db
- MONGO_PORT=$MONGO_PORT
- MONGO_DB=$MONGO_DB
ports:
- "3000:8080"
volumes:
- .:/home/node/app
- node_modules:/home/node/app/node_modules
networks:
- app-network
command: ./wait-for.sh db:27017 --
/home/node/app/node_modules/.bin/nodemon app.js

db:
image: mongo:4.1.8-xenial
container_name: db
restart: unless-stopped
env_file: .env
environment:
- MONGO_INITDB_ROOT_USERNAME=$MONGO_USERNAME
- MONGO_INITDB_ROOT_PASSWORD=$MONGO_PASSWORD
volumes:
- dbdata:/data/db
networks:
- app-network

networks:
app-network:

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 8


Desarrollo de Soluciones en la Nube

driver: bridge

volumes:
dbdata:
node_modules:
OJO: Se están definiendo dos servicios (nodejs y db).
El servicio nodejs será construido en base al archivo Dockerfile que se encuentra en el
proyecto, se están definiendo variables de entorno(environment), trabajar en el puerto
local 3000 y remoto 8080(ports), se define un volumen para guardar los
archivos(volumes), se define en que red trabajara(networks) y se define que se ejecute
el archivo app.js(command).
El servicio db se construye en base a una imagen de mongo(image), se define nombre
de contenedor(container_name), se definen variables de entorno(environment), se
define volumen para guardar datos(volumes), y se define en que red
trabajara(networks).
Por último, para ambos servicios se crea la red(networks) y se definen los volúmenes a
utilizar(volumes).

Evidencia

13. Ejecutar docker-compose

docker-compose up -d

14. Liste los contenedores en ejecución

docker ps

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 9


Desarrollo de Soluciones en la Nube

Evidencia

15. Verifique en Docker Desktop🡪Containers que se creó el contenedor app_node y


dentro de este se tienen los dos microservicios generados(db y nodejs)

Evidencia

16. En su navegador web acceda a la dirección local para probar el servicio. Se está
accediendo al servicio creado nodejs

http://localhost:3000/

Evidencia

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 10


Desarrollo de Soluciones en la Nube

17. Realice un nuevo pedido: coloque su nombre y apellido y haga clic en Enviar

Evidencia

18. Conectarse al servicio db

docker exec -it db mongo --host localhost --port 27017 -u userdemo


-p Tecsup

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 11


Desarrollo de Soluciones en la Nube

Evidencia

19. Listar las bases de datos del sistema

show dbs

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 12


Desarrollo de Soluciones en la Nube

Evidencia

20. Utilizar la base de datos deliverydb y listar los elementos insertados. Presione control +
c para salir del servicio

use deliverydb
db.pedidos.find()

Evidencia

21. Detener el servicio de docker-compose

docker-compose down

Evidencia

22. Verifique que en Docker Desktop🡪Containers, el contenedor y servicios se han


destruido.

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 13


Desarrollo de Soluciones en la Nube

Evidencia

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 14


Desarrollo de Soluciones en la Nube

Tarea

1. Implemente un proyecto con docker-compose que le permita utilizar dos servicios.


a. Servicio sistema: Este servicio permitirá crear una agenda virtual en la que pueda guardarse nombre de tarea, encargado
de tarea, fecha de entrega y estado de tarea. Debe realizarse un CRUD completo en el lenguaje de su preferencia.
b. Servicio BDdatos: Este servicio tendrá la base de datos que utilizará el servicio sistema. Debe ser una base de datos
relacional como MySQL, Postgres, etc. Solo se tendrá una única tabla(id_tarea, nombre_tarea, encargado_tarea,
fecha_entrega_tarea, estado_tarea)
2. Realice las configuraciones necesarias para configurar un archivo docker-compose.yml con los dos servicios solicitados.
3. Utilice la documentación oficial de docker-compose en su versión 3 para referencia de configuración
https://docs.docker.com/compose/compose-file/compose-file-v3/

Paso 1:
Crear una carpeta para el proyecto y organiza los archivos:

Evidencia

Paso 2: Configurar el archivo package.json

Evidencia

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 15


Desarrollo de Soluciones en la Nube

Paso 3: Instalar las dependencias de Node.js

Evidencia

Paso 4: Configurar el archivo app.js

Evidencia

Paso 5: Crear el archivo Dockerfile

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 16


Desarrollo de Soluciones en la Nube

Evidencia

Paso 6: Configurar el archivo docker-compose.yml

Evidencia

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 17


Desarrollo de Soluciones en la Nube

Paso 7: Levantar los servicios con Docker Compose

Evidencia

Paso 8: Crear la tabla tasks en PostgreSQL

Evidencia

Luego, dentro de PostgreSQL, ejecuta la siguiente consulta para crear la tabla tasks:

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 18


Desarrollo de Soluciones en la Nube

OBSERVACIONES (5 mínimo):
(Las observaciones son las notas aclaratorias, objeciones y problemas que se pudo
presentar en el desarrollo del laboratorio)
 Al principio, el middleware body-parser no estaba configurado correctamente o no se estaba
utilizando express.json() para manejar solicitudes JSON. Esto causaba que los datos enviados
desde Postman llegaran como null al servidor.
 La falta del encabezado Content-Type: application/json puede provocar que el servidor
no interprete correctamente el cuerpo de la solicitud, lo que resultó en que los datos llegaran como
null.
 Si bien la aplicación manejaba algunos errores en las rutas del servidor, un manejo de errores más
robusto podría ayudar a detectar y solucionar problemas antes. En algunos casos, no se
proporcionaban mensajes de error detallados.
 Los cambios en la configuración de los archivos o en el código de la aplicación a menudo requieren
un reinicio completo de los contenedores Docker para que surtan efecto. No hacer esto causó
confusión al no ver los cambios aplicados inmediatamente.
 Es posible que no se haya verificado la estructura de la tabla tasks en PostgreSQL correctamente
antes de enviar solicitudes POST. Esto puede causar que los datos no se almacenen como se esperaba.
CONCLUSIONES (5 mínimo):
(Las conclusiones son una opinión personal sobre tu trabajo, explicar cómo resolviste las
dudas o problemas presentados en el laboratorio. Además de aportar una opinión critica
de lo realizado)

 Se logró configurar y ejecutar un entorno de desarrollo que incluye tanto un servicio de base de datos
PostgreSQL como un servicio de aplicación Node.js usando Docker-Compose. Esto permite una fácil
administración y despliegue de aplicaciones de múltiples servicios con una sola configuración.

 La aplicación Node.js fue capaz de recibir y procesar correctamente solicitudes HTTP POST y GET
para crear y obtener tareas a través de rutas CRUD. El uso adecuado del middleware
express.json() permitió procesar los datos enviados en formato JSON de manera efectiva.

 Se logró establecer una conexión efectiva entre la aplicación Node.js y la base de datos PostgreSQL. Se
configuraron las credenciales de conexión y la estructura de la tabla para almacenar correctamente las
tareas con campos como nombre_tarea, encargado_tarea, fecha_entrega_tarea y
estado_tarea.

 El uso de console.log(req.body) en el servidor permitió identificar si los datos enviados desde


el cliente llegaban correctamente al servidor. Este tipo de depuración es esencial para entender cómo se
están procesando las solicitudes en el backend.
 Para que los cambios en la configuración (tanto de la aplicación como de PostgreSQL) surtan efecto,
fue necesario reiniciar los contenedores de Docker. El comando docker-compose down &&
docker-compose up --build asegura que los servicios se reinicien con las últimas
modificaciones.

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 19


Desarrollo de Soluciones en la Nube

Dpto. de Tecnología Digital Prof. Dennis Apaza Pág. 20

También podría gustarte