Repositorio para la practica de Contenerización de una aplicación
209
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.
En resumen, se empaquetará la aplicación utilizando Docker y se trabajará con ella utilizando las herramientas mencionadas anteriormente.
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.
2)En un editor de codigo agregamos el siguiente codigo al archivo Dockerfile
3)Se construye la imagen usando el comando:
| docker build -t getting-started . |
|---|
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.
| docker run -dp 127.0.0.1:3000:3000 getting-started |
|---|
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.
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.
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.
1)Obtener el ID del contenedor con el comando:
| docker ps |
|---|
| docker stop |
|---|
3)Eliminar el contenedor detenido
Se observa el cambio en el texto de la aplicación
2) se procede a empujar la imagen al repositorio utilizando el comando que nos arrojo el repositorio, este dependera de cada usuario
$ docker build --platform linux/amd64 -t eliasacuna/getting-started .
| docker run -dp 0.0.0.0:3000:3000 YOUR-USER-NAME/getting-started |
|---|
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">
procedemos a crear el archivo greetings y posteriormente saldremos del contenedor
nos saldra el siguiente error ya que el archivo no existe en el nuevo contenedor.
procederemos a ejecutar los siguientes comandos para eliminar los contenedores mediante su identificacion
ahora crearemos un nuevo volumen del contenedor para comprobar que los datos persisten
Los siguientes son ejemplos de un volumen con nombre y un montaje vinculado usando --mount:
type=volume,src=my-volume,target=/usr/local/datatype=bind,src=/path/to/data,target=/usr/local/dataAbra una terminal y cambie el directorio al getting-started-app directorio.
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.
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.
Cree un nuevo archivo llamado myfile.txt.
Abra el getting-started-app directorio en el host y observe que el myfile.txt archivo está en el directorio.
Desde el host, elimine el myfile.txt archivo.
En el contenedor, visualice el contenido del app directorio una vez más. Observe que el archivo ya no está.
Los siguientes pasos detallan cómo ejecutar un contenedor de desarrollo con un montaje de enlace que realiza las siguientes acciones:
Asegúrese de no tener ningún contenedor getting-started ejecutándose actualmente.
Ejecute el siguiente comando desde el getting-started-app directorio.
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:
En el src/static/js/app.jsarchivo, en la línea 109, cambie el botón "Agregar elemento" para que diga simplemente "Agregar":
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.
Content type
Image
Digest
sha256:d3218ec5f…
Size
82.5 MB
Last updated
over 2 years ago
docker pull jsanchezlo6/getting-started