Laboratorio de Redes de Docker

DockerBeginner
Practicar Ahora

Introducción

Las redes de Docker son un aspecto fundamental de la orquestación de contenedores, ya que permiten que estos se comuniquen entre sí y con redes externas. Este desafío te guiará a través de los conceptos esenciales de las redes de Docker, desde la creación y gestión de redes hasta la conexión y desconexión de contenedores.

Al completar este desafío, obtendrás experiencia práctica con los comandos de red de Docker y comprenderás cómo establecer la comunicación entre contenedores. Estas habilidades son cruciales para desarrollar y desplegar aplicaciones multi-contenedor en entornos Docker.

¡Sumerjámonos en el mundo de las redes de Docker!

Crear una Red

En este paso, crearás tu primera red de Docker. Esta es la base para conectar contenedores y permitir la comunicación entre ellos.

Tareas

  1. Crea una nueva red de tipo bridge llamada my-network utilizando el comando docker network create.
  2. Verifica que la red se haya creado listando todas las redes de Docker.

Requisitos

  • Realiza todas las operaciones en el directorio /home/labex/project.
  • Utiliza el controlador bridge por defecto al crear la red.

Ejemplo

Después de completar este paso, deberías ver my-network en la lista al ejecutar docker network ls:

NETWORK ID     NAME         DRIVER    SCOPE
abcdef123456   my-network   bridge    local
✨ Revisar Solución y Practicar

Lanzar Contenedores en la Red

Ahora que tenemos una red, lancemos algunos contenedores y conectémoslos a ella. Este paso demostrará cómo iniciar contenedores dentro de una red específica, un concepto clave en el ecosistema de Docker.

Tareas

  1. Inicia un contenedor llamado container1 usando la imagen nginx y conéctalo a my-network.
  2. Inicia otro contenedor llamado container2 usando la imagen httpd y conéctalo a my-network.
  3. Verifica que ambos contenedores estén en ejecución y conectados a my-network.

Requisitos

  • Realiza todas las operaciones en el directorio /home/labex/project.
  • Utiliza la bandera --network al iniciar los contenedores para conectarlos a my-network.
  • Ejecuta ambos contenedores en modo desatendido (detached).

Ejemplo

Al finalizar este paso, deberías ver ambos contenedores en ejecución al usar docker ps:

CONTAINER ID   IMAGE   COMMAND   CREATED         STATUS         PORTS     NAMES
abcdef123456   nginx   "..."     2 minutes ago   Up 2 minutes   80/tcp    container1
fedcba654321   httpd   "..."     2 minutes ago   Up 2 minutes   80/tcp    container2
✨ Revisar Solución y Practicar

Probar la Conectividad

En este paso, verificarás que los contenedores pueden comunicarse entre sí a través de la red que creaste. Esta es una prueba crucial para asegurar que tu configuración de red funciona según lo previsto.

Tareas

  1. Utiliza el comando docker exec para abrir una terminal en container1.
  2. Desde el interior de container1, utiliza el comando curl para acceder a container2 mediante su nombre de contenedor.

Requisitos

  • Realiza todas las operaciones en el directorio /home/labex/project.
  • Utiliza container2 como nombre de host en tu comando curl.
  • El comando curl debe acceder al puerto HTTP por defecto (80) en container2.

Ejemplo

Tras ejecutar el comando curl desde container1, deberías ver el contenido de la página por defecto del servidor Apache HTTP:

<!DOCTYPE html>
<html><body><h1>It works!</h1></body></html>
✨ Revisar Solución y Practicar

Conectar un Contenedor a Múltiples Redes

En este paso, aprenderás cómo conectar un solo contenedor a varias redes. Este es un concepto más avanzado que resulta útil para crear topologías de red complejas o para migrar servicios gradualmente entre redes.

Tareas

  1. Crea una nueva red de tipo bridge llamada my-network2.
  2. Conecta container2 a my-network2 manteniendo su conexión actual con my-network.
  3. Verifica que container2 esté ahora conectado a ambas redes.

Requisitos

  • Realiza todas las operaciones en el directorio /home/labex/project.
  • Utiliza el comando docker network connect para añadir container2 a my-network2.
  • Utiliza el comando docker inspect para verificar las conexiones de red.

Ejemplo

Después de conectar container2 a my-network2, deberías ver ambas redes listadas al inspeccionar el contenedor:

"Networks": {
    "my-network": {
        ...
    },
    "my-network2": {
        ...
    }
}
✨ Revisar Solución y Practicar

Desconectar un Contenedor de una Red

En este paso, aprenderás a eliminar un contenedor de una red sin necesidad de detenerlo. Esto es útil cuando necesitas aislar un contenedor o cuando estás reorganizando la arquitectura de tu red.

Tareas

  1. Desconecta container2 de my-network utilizando el comando docker network disconnect.
  2. Verifica que container2 ya no esté conectado a my-network.

Requisitos

  • Realiza todas las operaciones en el directorio /home/labex/project.
  • Utiliza el comando docker network disconnect para retirar container2 de my-network.
  • Utiliza el comando docker network inspect para verificar la desconexión.

Ejemplo

Tras desconectar container2 de my-network, no deberías ver a container2 listado al inspeccionar my-network:

$ docker network inspect my-network
[
    {
        "Name": "my-network",
        ...
        "Containers": {
            "container1": {
                ...
            }
        },
        ...
    }
]
✨ Revisar Solución y Practicar

Eliminar una Red

En este paso final, aprenderás a eliminar una red de Docker cuando ya no sea necesaria. La limpieza adecuada de los recursos no utilizados es una parte importante de la gestión eficiente de entornos Docker.

Tareas

  1. Desconecta container2 de my-network2 si todavía está conectado.
  2. Elimina la red my-network2 utilizando el comando docker network rm.
  3. Verifica que my-network2 haya sido eliminada.

Requisitos

  • Realiza todas las operaciones en el directorio /home/labex/project.
  • Asegúrate de que no haya contenedores conectados a my-network2 antes de eliminarla.
  • Utiliza el comando docker network ls para verificar la eliminación de la red.

Ejemplo

Después de eliminar my-network2, no deberías verla en la lista al ejecutar docker network ls:

NETWORK ID     NAME         DRIVER    SCOPE
abcdef123456   my-network   bridge    local
ghijkl789012   bridge       bridge    local
mnopqr345678   host         host      local
stuvwx901234   none         null      local
✨ Revisar Solución y Practicar

Resumen

¡Felicidades por completar el Desafío de Conceptos Básicos de Redes de Docker! Has navegado con éxito a través de los conceptos esenciales de las redes en Docker, incluyendo:

  1. Creación de redes personalizadas de Docker.
  2. Lanzamiento de contenedores dentro de redes específicas.
  3. Prueba de conectividad entre contenedores.
  4. Conexión de contenedores a múltiples redes.
  5. Desconexión de contenedores de redes.
  6. Eliminación de redes de Docker.

Estas habilidades constituyen la base de una gestión eficaz de redes en Docker y serán invaluables a medida que trabajes con aplicaciones contenedorizadas más complejas. Recuerda que una configuración de red adecuada es crucial para el aislamiento de contenedores, la seguridad y la comunicación eficiente entre servicios.

A lo largo de este desafío, has aprendido a crear entornos aislados para tus contenedores, permitir la comunicación entre ellos y gestionar las conexiones de red de forma dinámica. Estas capacidades te permiten diseñar arquitecturas de red sofisticadas que pueden adaptarse a requisitos cambiantes.

A medida que continúes tu camino con Docker, considera explorar temas de redes más avanzados, como las redes overlay para configuraciones multi-host, los plugins de red y cómo se integran las redes de Docker con plataformas de orquestación como Kubernetes. También podrías profundizar en conceptos de seguridad de red, como el uso de políticas de red para controlar el flujo de tráfico entre contenedores.

Sigue practicando estas habilidades y estarás bien preparado para diseñar y gestionar arquitecturas de red de contenedores sofisticadas en tus futuros proyectos. Recuerda, una red eficaz es la clave para construir aplicaciones contenedorizadas escalables, seguras y eficientes.