0% encontró este documento útil (0 votos)
77 vistas30 páginas

DOCKERS

Este documento explica cómo usar Docker para crear y ejecutar contenedores de MongoDB. Describe cómo descargar imágenes de Docker Hub, crear contenedores, mapear puertos, iniciar y detener contenedores, y conectar una aplicación de Node.js a MongoDB dentro de un contenedor Docker. También cubre conceptos clave como port mapping y variables de entorno para configurar contenedores.

Cargado por

Ce Contre
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
77 vistas30 páginas

DOCKERS

Este documento explica cómo usar Docker para crear y ejecutar contenedores de MongoDB. Describe cómo descargar imágenes de Docker Hub, crear contenedores, mapear puertos, iniciar y detener contenedores, y conectar una aplicación de Node.js a MongoDB dentro de un contenedor Docker. También cubre conceptos clave como port mapping y variables de entorno para configurar contenedores.

Cargado por

Ce Contre
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

DOCKERS

Contenedor?

Empaquetar nuestras aplicaciones y dependencias


Instalar Docker desktop

Es una máquina virtual optimizada que corre Linux

Docker compose contiene una línea de comandos


Instalar Docker desktop
¿Qué es Docker hub?

En la página de Docker podemos encontrar mas de 100,000 contendores que podemos usar.
Entre ellos Ubuntu, mongoDB, NodeJS, etc.

Entramos a NodeJS

Podemos ver las distintas versiones de NodeJS que podemos descargar y utilizar
inmediatamente.
Descargara la ultima version de la imagen de Docker,hay que especificar cual se desea si no se
quiere la ultima.

docker pull node

Ultima version de node según la lista :

Comandos para gestionar las imágenes

Docker images
En este caso ya bajamos 2 imagenes

Para descargar imagen

Docker pull node

Docker descargara cada una de las capas de la imagen. Si hay otra imagen que coinciden en
capas que ya se han descargado no se descargaran.

De esta forma descargaras la ultima

REPOSITORY ->

TAG ->
IMAGE ID -> identificador unico

CREATED -> fecha de creacion

SIZE -> espacio en disco duro

Para bajar una imagen de una versión especifica se usa: y luego le nro de la versión

Docker pull node:[version]

Se está descargando solo el resto de la imagen que falta, ya que habíamos descargado un node
anterior.

Bajamos otro node, la 19

Tenemos que saber el nombre de la imagen que debemos descargar

Para saber los nombres debemos entrar a Docker hub


Para eliminar las imágenes descargadas

Docker image rm node:19

Esto eliminara la imagen de Node versión 19

CREAR UN CONTENEDOR EN BASE A LA IMAGEN QUE DESCARGUEMOS

Para crear un contenedor primero necesitamos una imagen. Descargaremos la imagen de


mongo con

Docker pull mongo


Se selecciono mongo para el ejemplo por que no tiene tantas imágenes de configuración

Para crear docker

docker créate mongo

con esta línea creas un contenedor y su identificador de container

hay que guardar ese código por que servirá para ejecutar el contenedor

Docker create mongo es una forma abreviada de escribir:

docker container create mongo

para inicializar docker

Para inicializar el contenedor debemos usar docker start tal como se muestra abajo:

docker start
9d70bbde67aa2f97952d97bdb5e942a8f36180cc6149403a824ea7
f418b508ca
aquí utilizado en el terminal:

Visualizar los contenedores inicializados

Para mostrar los containeres que están inicializados debemos usar docker ps, de esa forma
verificamos que está ejecutándose.

docker ps

Las columnas que se visualizan en la table son:

Id container => identificador del contenedor(short)

Image => en base a que imagen se ha creado nuestro contenedor

Command => comando que usa el contenedor para ejecutarse

Created => fecha de creación

Status => estado

Ports => el puerto que utiliza 17017 es el que usa mongo para clientes o aplicaciones que se
puedan conectarse a el

Names => nombre del contenedor

Detener la ejecución de un contenedor

Lo detenemos con la instruccion

Docker stop [container id]

Luego vemos la lista y no tenemos contenedores

Mostrar los contenedores de nuestro sistema así no se estén ejecutando


Docker ps -a

Permite listar los contenedores así no se estén utilizando

Los campos de la tabla so:

Container id => id del contenedor

Image => baso en la imagen de mongo

Command => el commando que se esta utilizando para correr

Created => hace cuanto se ha creado

Status => indica hace cuanto tiempo se ha desconectado

Port => no hay ninguno

Names => el nombre que se esta utilizando

Para poder hacer referencia a este contenedor podemos usar el nombre o el id

En este caso estamos borrando el contenedor llamado sad_turing

Docker rm sad_turing

Luego Podemos listar con

Docker ps -a

Ahora veremos que no se nos muestra nada

Asignando un nombre al contenedor

También podemos crear u contenedor asignándole un nombre


Podemos usar

Docker create –name moguito mongo

Donde estamos diciendo que cree utilizando un nombre que será moguito basado en la
imagen de mongo.

Esta operación devuelve el id del contenedor. Pero ahora podemos no usarlo ya que tenemos
el nombre: monguito

Para inicializarlo usaríamos start

docker start monguito

Ahora cuando usemos el comando

docker ps

Aparecerá monguito como un contenedor activado corriendo hace 31 segundos

Si intentadamos acceder a este contenedor para utilizar mongo y empezar a guardar datos
dentro de esta base de datos no vamos a poder

La razón es que no se encuentra ningún puerto publicado o abierto para que podamos utilizar
este contenedor. A pesar que se muestra que el contenedor esta usando el puerto 27017

Necesitamos indicar un puerto de nuestro computador físico el cual vamos a mapear a un


contenedor
PORT MAPPING

Cuando nosotros recibimos una conexión por algún puerto de nuestra maquina y queremos
mapearlo a algún puerto de uno de nuestros contenedores.

Tenemos 2 aplicaciones comunicándose por el puerto 3000 y una aplicación de mongoDB por
el puerto 27017

Las aplicaciones de nodeJS pueden estar comunicándose de manera interna con mongoDB
Que pasaría si queremos comunicarnos a las 2 aplicaciones de node ?

Ambas aplicaciones corren en el puerto 3000, esto es válido. Aquí tendríamos que hacer un
port mapping

Donde las conexiones que recibamos desde afuera por ejemplo desde el puerto 3000 la
mapeemos hasta la primera aplicación node . Otra conexión puede ser recibida en el puerto
3001 pueda ser redireccionada al contenedor de la siguiente aplicación de nodeJS

De estra forma las conexiones que van al puerto 3000 van a la primera aplicación y las
conexiones que van al puerto 3001 van a la segunda aplicación

Si ndeseamos podríamos hacer lo mismo para el servidor de mongoDB a travez del puerto
externo 27017

La idea es que los puertos de la computadora estén asociados los puertos de las aplicaciones
Eliminamos monguito y nos quedamos sin contenedores. Primero se detiene y luego se elimina

Podemos crear un nuevo contenedor mapeando puertos

-p => significa publish

27017 => El primer puerto es el puerto de nuestra maquina

: 27017 => El segundo puerto es el puerto del contenedor

--name => para colocar el nombre

monguito => es el nombre

mongo => El nombre de la imagen usado como base para crear el contenedor

Podemos inicializar monguito con start

Ahora inicializado podemos visualizar monguito. Ademas podemos ver en la columna de ports
Aquí dice que la ip [Link]. que viene a ser nuestra maquina con el puerto 27017 está
mapeando al puerto al puerto 17017 del contenedor monguito

Existe la opción de no definir el puerto del contenedor monguito y se creara el mapeo pero
con un puerto que Docker decida

Como saber si el servidor de mongo se ejecutó de manera correcta

Docker logs monguito

Donde monguito es el nombre del contenedor. –follow sirve para mantenerse observado
cambios en el log de monguito

Comando que combina pull, create y start

Se debe detener y eliminar . también borrar la imagen e mongo

Docker run mongo


Vera si se encuentra la imagen , la descarga si la imagen no existe luego creara un contenedor
y lo inicializara. Nos dejara ejecutando logs si salimos dejara de ejecutarse.
Docker run -d mongo
En modo detache donde no mostrara log y nos mandara a línea
de comando con -d

SIGUIENTE SECCION

Mongoose es una librería que sirve para conectar express con mongoDB.

También definimos un modelo que tiene como atributos tipo string y estado string también

En la url se define que

El usuario es nico

La contraseña es password

Luego la arroba

Indica la maquina a la cual quiere que me conecte localhost para hacer las consultas y registrar

Después de los dos puntos indico el puerto 27017


Indicó la base de datos en este caso miapp

Y un parámetro de configuración que es un usuario de tipo administrador

La finalidad es que la aplicación se pueda conectar con una instancia de mongo pero que se
encuentre dentro de un container de Docker. De esta forma no nos tendremos que descargar
mongo. De esta forma usaremos los recursos de Docker para conectar a mongo a través de
Docker (48:38)

La aplicación tiene 2 endpoints o rutas:

Cuando este en la raíz buscara todos los animales que se encuentren en la base de datos

Luego las devolverá

El siguiente endpoint /crear que creara un objeto de tipo chanchito y con el estado feliz

Luego devolverá un string ok


El objetivo es que la aplicación se puede conectar con una instancia de mongo que se
encuentre dentro de un container de Docker (que no tengamos que descargar una aplicación
de mongo). Que utilicemos las funcionalidades que ofrece Docker par poder conectar nuestra
aplicación a mongo, pero con Docker.

Ahora debemos ir a Docker hub y buscar mongo

Ya que necesitamos algunos parámetros de configuración cuando estemos creando nuestro


contenedor para acceder a la base de datos.

En la página de mongo en Docker hub podemos encontrar los pasos para configurar docker en
mongo

Todas las imágenes se configuran distinto


En el caso de mongo necesitamos las dos variables que se indican abajo

Eliminamos todos los contenedores

Descargamos la imagen de mongo

Docker pull mongo


Ahora crearemos un contenedor configurado para que nos podamos conectar

Creamos un contenedor usando el comando create


Docker create -p27017:27017 –name monguito -e
MONGO_INITDB_ROOT_USERNAME=nico -e
MONGO_INITDB_ROOT_PASSWORD=password mongo
-e significa variable de entorno

Ahora en visual code

Creamos un proyecto. vamos a una carpeta de tu elección

En teminal

Npm init -y

Npm I express mongoose

Escribir el código que se mostró con anterioridad


Configurar [Link]

En terminal

Npm start
En el navegador al ir a la raíz solo se verá un array vacío pero si luego vas a crear se generará
un objeto chanchito feliz

En el terminal podemos ver

De esta forma se crea un contenedor de mongo de manera exitosa

Nuestras aplicaciones se pueden conectar a el ya que no debemos descargar ni instalar por


que eso nos lo da Docker.
AHORA VEREMOS COMO COLOCAR LA APLICACIÓN CONSTRUIDA EN NODEJS Y METERLA EN
UN CONTAINER

Se crea un archivo llamado Dockerfile, esto es necesario

Y se utiliza para escribir las instrucciones para crear nuestros contenedores

Siempre que creemos una imagen se debe basar en otra imagen

En este ejercicio vamos a querer que nuestra imagen se base en node

From node => quiere decir que se base en node(el nombre de la imagen)

FROM node:18

Ahora debemos crear una carpeta donde coloquemos nuestro código fuente base

Para eso creamos una carpeta utilizando

RUN mkdir -p /home/app


Esta ruta esta dentro del mismo contenedor que viene a ser una distribución de linux

Esto no hace referencia a tu maquina física

No hace referencia a tu sistema de archivos

Hace referencia al contenedor que estamos creando ahora

En la carpeta/home/app meteremos el código fuente de nuestra aplicación

Como dijimos, en la ruta /home/app es donde meteremos el código fuente de nuestra


aplicación, incluso la carpeta node_modules

ahora tenemos que indicar de donde va a sacar el código fuente que meteremos dentro de
este contenedor
RUN permite ejecutar instrucciones del S.O. de Linux, pero COPY nos permitirá acceder a los
archivos del sistema operativo anfitrión(Windows , Linux o macOS) lo cual tomara los archivos
de nuestro SO y los meterá adentro de nuestro contenedor.

COPY es una instrucción que sirve para definir de dónde vienen los archivos de la aplicación
que están en el sistema operativo anfitrión

. -> El punto indica la ruta de código fuente, punto indica el lugar actual ya que nos
encontramos en la raíz de la aplicación con el terminal

/home/app -> viene a ser el destino donde voy a colocar el código fuente

COPY . /home/app

Ahora debemos exponer un puerto para que otros contenedores o incluso desde nosotros
desde el sistema operativo anfitrión nos podamos conectar a este contenedor

Esto se hace con la instrucción EXPOSE y el puerto de la aplicación

EXPOSE 3000

Luego utilizar el comando CMD que se debe ejecutar para que la aplicación corra

CMD [“node”, ”/home/app/[Link]”]

El comando es: node

y sus argumentos son la ruta completa /home/app/[Link]

Se tiene que indicar la ruta completa

Hasta aquí no se podrá ejecutar y eso es por que :


Los contenedores no necesariamente se podrán comunicar entre si. Cada uno de ellos puede
estar isolado uno del otro. Pueden tener comunicación hacia afuera con el mapeo de los
puertos, pero no pueden comunicarse entre ellos.

Para que los contenedores se comuniquen entre si se debe agrupar los contenedores a través
de una red interna de Docker(en la imagen se llamara mi red)

Los contenedores dentro de una red se van a poder comunicar entre si

Se puede tener más de una red cada una puede contener distintos contenedores que se estén
comunicando entre si

El archive dockerfile debería quedar asi


Con el comando network ls podemos listar todas las redes

docker network ls

Ahora crearemos nuestra red

docker network create mired

para eliminar una red

docker network rm mired

La forma que tienen los contenedores para comunicarse entre si .cuando los contenedores
se encuentran dentro de una misma red interna de docker es mediante el nombre del
contenedor

Esto quiere decir que el nombre del dominio del contenedor va a ser el mismo que el nombre
que nosotros se asignamos cuando creamos el contenedor

Tenemos que volver al código fuente y cambiar la ruta que usamos para conectarnos a mongo
Por

Se reemplazo el nombre del dominio (localhost) por el nombre del contenedor(monguito)

AHORA CREAREMOS LA IMAGEN DE NUESTRAS APLICACION

Luego en el terminal utilizar el comando build

Docker build se utiliza para poder crear imágenes en base a un archivo dockerfile que nosotros
hayamos creado antes

Recibe dos argumentos

docker build -t miapp:1 .

-t se usa para definir un nombre, el nombre es miapp


Luego sigue : y la etiqueta(que entiendo que puede ser un nombre o un numero de version de la
imagen como latest, 1, o 1.01)

el punto busca definir la ubicación del archivo Dockerfile, como estamos posicionados en la
raíz y allí mismo se encuentra dockerfile entonces usamos el punto

docker build -t [nombre]:[etiqueta] [ubicación de Dockerfile]


para saber si la imagen se creo correctamente

docker images

Ahora cada vez qyue creemos un contenedor debemos indicarle que pertenecen a una red en
especifico. Por lo tanto el contenedor monguito que creamos antes no nos va a servir asi que
debemos eliminarlo.

Debemos crear un contenedor que se encuentre vinculado a la red mired que creamos
anteriormente

Eliminamos monguito con Docker rm monguito, por que no tiene definido la red mired

Creamos otra vez monguito definiendo network mired

Ahora crearemos el contenedor de la aplicación que nosotros acabamos de colocar dentro de


una imagen

También podría gustarte