Docker – Networking y comandos básicos

Todo sistema informático necesita tener conectividad con otros sistemas de donde pueda tomar datos y hacia donde pueda brindar sus servicios. Los contenedores son sistemas «encapsulados», por decirlo de algún modo simple, pero no por eso deben quedar desconectados de otros sistemas ya sean físicos, virtuales o en contenedores. Es por ello que Docker brinda un buen manejo en redes de datos. En el presente artículo se mostrará cómo se configuran las redes de datos en contenedores Docker.

Tipos de redes

Primero debemos mencionar que al momento de instalar el Docker Engine en un sistema host, se crean automáticamente 3 redes denominadas «none«, «host» y «bridge«.

La red «none» es una red donde el contenedor no tiene otra interfaz de red que la de localhost.

La red «bridge» es la red por defecto de docker y todos los contenedores creados pertenecerán a esta red si es que no se especifica alguna otra. Es la que utiliza la red configurada en la interfaz docker0 del servidor donde se encuentra instalado docker.

La red «host» es utilizada por contenedores que no se aíslan de la máquina host donde se encuentra instalado docker. Esto significa que toma todas las interfaces de red configuradas en la máquina host. Por lo tanto, si el contenedor tiene un servicio en el puerto 80, la máquina host brindará ese servicio.

El comando docker que maneja la configuración de red es «docker network«.

Para listar las redes configuradas y disponibles en un host se debe ejecutar el comando «docker network ls«.

Todas las configuraciones de los contenedores docker se guardan en archivos del tipo JSON. Y el comando para poder leer los archivos de configuración de una red creada en docker se debe ejecutar el comando «docker network inspect nombre_de_red«.

La salida de la red bridge va a ser similar a la siguiente.

Crear redes

Podemos crear nuestro propia red para el fin que necesitemos, por ejemplo tener una subred en una DMZ (Zona Desmilitarizada) para un server de base de datos que brinda servicio a un sitio web que se encuentra en una red pública. El comando para crear redes en docker es «docker network create --subnet 10.10.1.0/24 nombre_red«.

Conectar redes

Con el comando «docker network connect nombre_red nombre_container» se puede conectar en caliente un contenedor a una red disponible.

Luego de conectar un contenedor a una red, podremos ver su configuración inspeccionando la configuración del contenedor.

Exponer puertos

Al crear un contenedor se puede exponer los puertos en los que dará servicio. Esto es solamente a modo informativo para la configuración lo cual indica que esos puertos estarán disponibles en el contenedor, pero no indica que esos puertos estarán respondiendo peticiones de servicio. El comando para exponer puertos es «docker run -itd --expose 80 --expose 443 --name nombre_contenedor nombre_imagen«.

Para poder verificar la configuración de un contenedor y ver su archivo JSON se utiliza el comando «docker inspect nombre_contenedor«.

Publicar puertos

Para que un puerto responda a peticiones en un servidor, se lo debe publicar. Para esto se debe utilizar la variable «-p» al crear un contenedor. Existen 3 formas de publicar un puerto.

La primera es con el comando «docker run -itd -p 80 nombre_imagen«. De este modo el puerto 80 del contenedor estará respondiendo en un puerto aleatorio de la máquina host.

El comando para verificar los puertos que se encuentran publicados en un contenedor es «docker port ID/nombre_imagen»

El segundo método es con el comando «docker run -itd -p 8080:80 nombre_imagen«. De este modo el puerto 80 del contenedor estará publicado en el puero 8080 de la máquina host. Es así que podemos determinar de un modo arbitrario el puerto de la máquina host que estará respondiendo al puerto del contenedor.

Si deseamos conocer si un puerto en particular de un contenedor se encuentra publicado, podemos especificar el puerto con el comando «docker port nombre_imagen Puerto«.

En esta tercera opción todos los puertos expuestos en el contenedor serán publicados en puertos aleatorios de la máquina host. El comando es «docker run -itd -P nombre_imagen«.

Podemos ver los puertos asignados con el comando «docker port nombre_imagen» o inspeccionando la configuración del contenedor.

Linkear contenedores

Cuando se crea un nodo de contenedores es necesario que esos contenedores puedan conectarse entre sí por IP o por nombre de host. Pero como ya se dijo, si un contenedor se apaga al iniciarse nuevamente se generan nuevos parámetros como el ID y la IP que utiliza.

Para poder salvar este problema, existe la funcionalidad de «linkear«, enlazar, uno o más contenedores que permitirá que cada vez que uno de los contenedores enlazados se apague y se encienda, no importe la IP que el motor docker le asigne ya que se conectarán por el nombre de contenedor. Toda la magia necesaria la realiza el motor docker, como por ejemplo las reglas de ruteo, las reglas dns, etc.

Para poder enlazar contenedores se debe utilizar la variable «–link» al crear un contenedor con el comando «docker run -itd --link ID/contenedor01 --name contenedor01 -h contenedor02 debian«.

En el siguiente video se muestra de manera práctica lo dicho en el presente artículo.

Recuerden comentar y compartir sus experiencias para poder incrementar el conocimiento de cada uno de nosotros.

Enlace útiles

Docker: www.docker.com
Twitter: @ApuntesIT
Youtube: https://www.youtube.com/channel/UCh_k8K1wP31GfOFdYJj5Eeg
Dailymotion: http://www.dailymotion.com/apuntesit

Apuntes IT - Compartiendo conocimiento.
Tech Nerd theme designed by Siteturner
Share
Share