Sign inSign up

jsanchezlo6/getting-started

By jsanchezlo6

•Updated over 2 years ago

Repositorio para la practica de Contenerización de una aplicación

Image
Databases & storage
0

209

jsanchezlo6/getting-started repository overview

⁠Grupo 6

  • David Medina - 424738
  • Felipe Sánchez - 611390
  • Elias Acuña - 710154
  • Juan Felipe Sánchez - 594066
  • Brayan Andres Lara - 728895

⁠Contenerización de una aplicación

En esta practica, se procederá a contenerizar una aplicación. Durante el proceso, se trabajará con un gestor de listas de tareas básico que opera en Node.js.

⁠Requisitos

  • Se debe tener instalada la última versión de Docker Desktop.
  • Se ha de contar con un cliente Git instalado.
  • Se necesita un IDE o editor de texto para editar archivos. Docker recomienda el uso de Visual Studio Code.

En resumen, se empaquetará la aplicación utilizando Docker y se trabajará con ella utilizando las herramientas mencionadas anteriormente.

⁠Obtener la aplicación

  1. Clonar el repositorio getting-started-app usando el comando:

Imagen 1

Imagen 2

⁠Construir la imagen de la aplicación

Un Dockerfile es como una receta de cocina para crear una imagen de contenedor. Es un archivo de texto que contiene una serie de instrucciones que Docker utiliza para construir automáticamente una imagen Docker. Especifica qué software y configuraciones se deben incluir en la imagen, así como cómo se deben configurar y ejecutar. Una vez que tienes un Dockerfile, Docker puede usarlo para construir una imagen de contenedor de manera consistente y reproducible.

  1. Entrar en el repositorio clonado y crear un archivo vacío llamado Dockerfile

Imagen 3

2)En un editor de codigo agregamos el siguiente codigo al archivo Dockerfile

Imagen 4

3)Se construye la imagen usando el comando:

docker build -t getting-started .

Imagen 5

Imagen 6

Cuando se ejecuta el comando docker build, Docker utiliza el Dockerfile proporcionado para construir una nueva imagen. Si la imagen base especificada en el Dockerfile no está disponible localmente, Docker la descarga automáticamente. Luego, Docker sigue las instrucciones del Dockerfile, copiando los archivos de la aplicación, instalando dependencias (en este caso, usando yarn), y configurando el comando predeterminado que se ejecutará al iniciar un contenedor a partir de esta imagen (especificado por la directiva CMD).

La bandera -t permite etiquetar la imagen con un nombre que elijas, haciéndola fácilmente identificable. En este caso, la imagen se etiqueta como "getting-started". Al final del comando, el "." indica que Docker debe buscar el Dockerfile en el directorio actual.

En resumen, el comando docker build utiliza el Dockerfile para construir una imagen de contenedor, siguiendo las instrucciones especificadas en el Dockerfile y etiquetando la imagen resultante para facilitar su identificación.

⁠Iniciar un contenedor de aplicaciones

  1. Ejecutar el comando:
docker run -dp 127.0.0.1:3000:3000 getting-started

Imagen 7

Imagen 8

La bandera -d (abreviatura de --detach) ejecuta el contenedor en segundo plano, lo que significa que Docker inicia el contenedor y lo devuelve al indicador de terminal. Se puede verificar que un contenedor esté en ejecución visualizándolo en Docker Dashboard en Containers o ejecutando docker ps en la terminal.

La bandera -p (abreviatura de --publish) crea una asignación de puertos entre el host y el contenedor. Toma un valor de cadena en el formato HOST:CONTAINER, donde HOST es la dirección en el host y CONTAINER es el puerto en el contenedor. El comando publica el puerto 3000 del contenedor en 127.0.0.1:3000 (localhost:3000) en el host. Sin la asignación de puertos, no se puede acceder a la aplicación desde el host.

  1. Abrir en el navegador web el enlace:

Al agregar uno o dos elementos y verificar que funcione según lo esperado, se puede confirmar que la interfaz está almacenando los elementos correctamente en el backend. Esto implica ingresar los elementos en la interfaz, verificar que se guarden correctamente en el backend y luego confirmar su presencia en la interfaz nuevamente.

Una vez que se han agregado los elementos, se puede marcar esta tarea como completa y eliminarla para mantener un registro ordenado del progreso.

Imagen 9

⁠Actualizar la aplicación

En esta sección, se procederá a actualizar tanto la aplicación como la imagen asociada. Además, se aprenderá a detener y eliminar un contenedor en ejecución.

⁠Actualizar el código fuente

  1. En el src/static/js/app.jsarchivo, se actualiza la línea 56.

Imagen 11

  1. Crear la versión actualizada de la imagen.

Imagen 12

⁠Eliminar el contenedor creado anteriormente

1)Obtener el ID del contenedor con el comando:

docker ps
  1. Utilizar el docker stopcomando para detener el contenedor. Reemplazar con el CONTAINER ID.
docker stop

Imagen 13

Imagen 14

3)Eliminar el contenedor detenido

Imagen 15

⁠Iniciar el contenedor de aplicaciones actualizado

  1. Usar docker run para iniciar el contenedor

Imagen 16

Imagen 17

  1. Abrir en el navegador web el enlace:

Se observa el cambio en el texto de la aplicación

⁠Antes

Imagen 13

⁠Despues

Imagen 18

⁠Compartir la aplicación

  1. para compartir la aplicacion lo primero que se deb realizar es crear un repositorio en docker-hub

    ⁠crear repositorio y ponerlo publico

Imagen 20

2) se procede a empujar la imagen al repositorio utilizando el comando que nos arrojo el repositorio, este dependera de cada usuario

⁠empujar imagen

Imagen 21

3) como siguiente paso ejecutaremos la imagen en una segunda instancia utilizando el comando:

$ docker build --platform linux/amd64 -t eliasacuna/getting-started .

⁠ejecutar imagen en segunda instancia

Imagen 22

  1. Se inicia la aplicación en un nuevo contenedor creado, con la imagen que se descargo del repositorio
docker run -dp 0.0.0.0:3000:3000 YOUR-USER-NAME/getting-started

Imagen 19

Imagen 20

⁠Conservar la base de datos

  1. para conservar la base de datos primero se debe iniciar un contenedor alpino y acceder a su caparazón con el siguiente comando: docker run -ti --name=mytest alpine

    ⁠conservar la BD

Imagen 23

como en este caso no reconoce el comando, se debe ejecutar mediante el siguiente: $ winpty docker run -ti --name=mytest alpine de esta forma, el comando empezara la descarga

 <p align="center">
Imagen 24

procedemos a crear el archivo greetings y posteriormente saldremos del contenedor

Imagen 25

nos saldra el siguiente error ya que el archivo no existe en el nuevo contenedor.

Imagen 26

procederemos a ejecutar los siguientes comandos para eliminar los contenedores mediante su identificacion

Imagen 27

Imagen 28

ahora crearemos un nuevo volumen del contenedor para comprobar que los datos persisten

Imagen 29

⁠Datos de prueba

Imagen 29

⁠USAR MONTAJES DE ENLACE

⁠Comparaciones rápidas de tipos de volumen

Los siguientes son ejemplos de un volumen con nombre y un montaje vinculado usando --mount:

  • Volumen nombrado: type=volume,src=my-volume,target=/usr/local/data
  • Montaje de enlace: type=bind,src=/path/to/data,target=/usr/local/data

Abra una terminal y cambie el directorio al getting-started-app directorio.

Imagen 31

Para iniciar una sesión de bash en un contenedor Ubuntu con un montaje de enlace, proceda ejecutando el siguiente comando. La opción --mount type=bind instruye a Docker para establecer un montaje de enlace, permitiendo la sincronización de directorios entre el sistema operativo anfitrión y el contenedor. En este caso, 'src' representa el directorio de trabajo actual en su máquina host, que en este contexto es el proyecto denominado 'getting-started-app'. Por otro lado, 'target' indica la ubicación dentro del contenedor donde se reflejará este directorio montado, en este caso, '/src'. Al ejecutar este comando, asegúrese de reemplazar 'src' y 'target' con las rutas correspondientes según su configuración específica.

Imagen 32

Tras ejecutar el comando proporcionado, Docker abre una sesión interactiva de bash dentro del contenedor, colocándolo en el directorio raíz del sistema de archivos del contenedor. Esto significa que está directamente dentro del entorno del contenedor, listo para interactuar con él utilizando comandos de bash. Desde este punto, puede explorar y trabajar dentro del entorno del contenedor según sea necesario para el proyecto o tarea en curso. Después de ejecutar el comando, diríjase al directorio 'src'. Este es el directorio que se montó al iniciar el contenedor y muestra los mismos archivos que tiene en el directorio 'getting-started-app' de su máquina host. Puede verificar esto listando el contenido del directorio utilizando el comando ls. Esto le permitirá confirmar que está trabajando con los archivos correctos y que el montaje de enlace se realizó correctamente.

Imagen 33

Cree un nuevo archivo llamado myfile.txt.

Imagen 34

Abra el getting-started-app directorio en el host y observe que el myfile.txt archivo está en el directorio.

Imagen 35

Desde el host, elimine el myfile.txt archivo.

Imagen 36

En el contenedor, visualice el contenido del app directorio una vez más. Observe que el archivo ya no está.

Imagen 37

⁠Contenedores de desarrollo

Los siguientes pasos detallan cómo ejecutar un contenedor de desarrollo con un montaje de enlace que realiza las siguientes acciones:

  • Monta su código fuente en el contenedor.
  • Instala todas las dependencias necesarias.
  • Inicia nodemon para observar los cambios en el sistema de archivos.

Asegúrese de no tener ningún contenedor getting-started ejecutándose actualmente.

Ejecute el siguiente comando desde el getting-started-app directorio.

Imagen 38

  • Para ejecutar el contenedor en modo independiente (en segundo plano) con una asignación de puertos, se utiliza la opción -d -p 127.0.0.1:3000:3000. Esto garantiza que el contenedor funcione en segundo plano y que el puerto 3000 del contenedor esté mapeado al puerto 3000 del host.

  • Además, se establece el "directorio de trabajo" del contenedor utilizando la opción -w //app, lo que indica que el directorio actual desde donde se ejecuta el comando es /app dentro del contenedor.

  • Luego, se emplea la opción --mount type=bind,src="/$(pwd)",target=/app para enlazar y montar el directorio actual del host al directorio /app dentro del contenedor. Esto asegura que el código fuente del proyecto esté disponible dentro del contenedor y se sincronice con los cambios realizados en el sistema de archivos del host.

  • La imagen base utilizada es node:18-alpine, que se especifica con el propósito de la aplicación según el Dockerfile.

  • Por último, el comando ejecutado dentro del contenedor es sh -c "yarn install && yarn run dev". Aquí, se inicia un shell utilizando sh (ya que alpine no tiene bash) y se ejecutan los comandos yarn install para instalar las dependencias del proyecto y yarn run dev para iniciar el servidor de desarrollo. Es importante mencionar que si se revisa el archivo package.json, se verá que el script dev inicia el servidor utilizando nodemon.

Los registros se pueden ver usando docker logs . Sabrás que estás listo para comenzar cuando visualice esto:

Imagen 39

⁠Desarrolla tu aplicación con el contenedor de desarrollo

En el src/static/js/app.jsarchivo, en la línea 109, cambie el botón "Agregar elemento" para que diga simplemente "Agregar":

Imagen 40

Imagen 41

Actualice su página en el navegador web y notará que el cambio se refleja casi de inmediato gracias al montaje del enlace. Nodemon detectará el cambio y reiniciará el servidor automáticamente. Es posible que el servidor de Node tarde unos segundos en reiniciar. Si encuentra algún error, inténtelo de nuevo después de unos segundos.

Imagen 42

Tag summary

Content type

Image

Digest

sha256:d3218ec5f…

Size

82.5 MB

Last updated

over 2 years ago

docker pull jsanchezlo6/getting-started