Lección 06. Mapeo de Puertos en Contenedores.

En clases anteriores, hemos aprendido como crear, inicializar, detener y eliminar contenedores.

Pero cuando inicializamos un contenedor como lo hemos aprendido hasta ahora, con:

Copiar código
docker start <ID>

El contenedor se encuentra ejecutándose, pero NO tiene conexión de salida en el contenedor.

Para poder acceder a un CONTENEDOR, se necesita realizar un MAPEO DE PUERTOS entre la MAQUINA FISICA y el CONTENEDOR.

Tomémoslo de la siguiente manera:

Necesitamos que el PUERTO de ACCESO-SALIDA del CONTENEDOR, este relacionado con un PUERTO de ACCESO-SALIDA de la maquina/servidor.

Expliquemos mejor con una imagen:

Funcionamiento entre puertos en Docker.

</> Funcionamiento entre puertos en Docker.

Donde tenemos 3 contenedores:

Esto permite, tanto la seguridad de los contenedores, como también previene posibles colisiones de puertos en el host, pudiendo, como en ejemplo, poder correr diferentes versiones del mismo servicio y modificar su puerto de manera sencilla.

Recordemos que teníamos creado un contenedor, al cual llamamos monguito.

Vamos a eliminarlo, para crear un nuevo, el cual tenga las configuraciones.

Copiar código
docker rm monguito

Creación Contenedor con Puertos Mapeados._

Para crear un contenedor con los puertos mapeados, se utiliza el comando de docker create, pero con parametros extra:

Copiar código
docker create -p<puerto-servidor>:<puerto-contenedor> --name <nombre> <imagen>

Lo único extra es: <puerto-servidor>:<puerto-contenedor>.

Donde:

Ahora, vamos a crear un contenedor nuevo basándonos en la imagen de mongo, con los puertos mapeados:

Para ello, vamos a ejecutar el comando:

Copiar código
docker create -p27017:27017 --name monguito mongo

De esta manera, hemos creado un contenedor que tenga los puertos mapeados.

Nota: Mongo utiliza por defecto el puerto 27017, por eso utilizamos esos.

Visualizar Mapeo de Puertos en Contenedores._

Activemos el contenedor monguito, con: docker start monguito y ejecutemos el comando: docker ps.

En el apartado de ports de el contenedor de nombre monguito debería aparecernos algo similar a:

Copiar código
0.0.0.0:27017->27017/tcp, :::27017->27017/tcp

Si conoces un poco de redes, entenderás mejor esto, pero, basta con visualizar 27017->27017 para comprenderlo.

El puerto 27017 de nuestro equipo físico se encuentra mapeado al puerto 27017 del contenedor monguito.

SI NOSOTROS SOLO COLOCAMOS UN PUERTO EN LOS ARGUMENTOS DEL COMANDO, DOCKER DECIDIRA EL PUERTO DEL EQUIPO FISICO.

Veamos que pasa si:

Copiar código
docker create -p27017 --name monguito2 mongo

Creamos otro contenedor, el cual solo tiene definido el puerto del contenedor (el cual es el 27017) y se llamara monguito2.

Lo inicializamos: docker start monguito2.

Y visualizamos: docker ps.

El el apartado de ports:

Copiar código
0.0.0.0:32768->27017/tcp, :::32768->27017/tcp

Vemos que Docker nos establece un mapeado en la maquina física (en este caso fue el puerto 32768).

¡Listo!, Ya vimos que pasa si solo definimos un puerto.

Podemos detener y eliminar el contenedor monguito2.

¿Sabes como verdad?, hazlo.

Visualizar logs de Contenedor._

También Docker permite poder visualizar el registro de acciones de un contenedor.

Para ello, se utiliza el comando:

Copiar código
docker logs <container>

Nota: recuerda, <container> puede ser el ID o el NAME de un contenedor.

Utilicemoslo con monguito:

Copiar código
docker logs monguito

Pero, este comando solo mostrara los logs sin actualización continua, es decir, regresará a la línea de comandos.

Si deseamos que la línea de comandos quede en modo escucha, debemos colocar:

Copiar código
docker logs --follow <container>

Veamos la prueba:

Copiar código
docker logs --follow monguito

Si tenemos otra terminal, podría sernos útil este comando.

Para detener la "escucha" y regresar a la línea de comandos, ejecuta: Ctrl+C.