Cómo usar el comando docker network connect para administrar redes de contenedores

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo gestionar eficazmente las redes de contenedores utilizando el comando docker network connect. Explorará cómo conectar un contenedor en ejecución a una red existente, conectar un contenedor a una red durante su inicio inicial, especificar una dirección IP estática para un contenedor en una red y crear alias de red para los contenedores para facilitar una comunicación más sencilla.

A través de ejercicios prácticos, adquirirá experiencia práctica en la manipulación de configuraciones de redes de contenedores, lo que le permitirá construir aplicaciones Dockerizadas más robustas e interconectadas.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/run -.-> lab-555173{{"Cómo usar el comando docker network connect para administrar redes de contenedores"}} docker/ps -.-> lab-555173{{"Cómo usar el comando docker network connect para administrar redes de contenedores"}} docker/rm -.-> lab-555173{{"Cómo usar el comando docker network connect para administrar redes de contenedores"}} docker/network -.-> lab-555173{{"Cómo usar el comando docker network connect para administrar redes de contenedores"}} end

Conectar un contenedor en ejecución a una red

En este paso, aprenderá cómo conectar un contenedor Docker en ejecución a una red existente. Esto es útil cuando tiene un contenedor que ya está en ejecución y necesita que se comunique con otros contenedores o servicios en una red específica.

Primero, creemos una nueva red que usaremos para esta demostración. Crearemos una red bridge llamada my-network.

docker network create my-network

Debería ver una salida similar a esta, lo que indica que la red se creó correctamente:

<network_id>

Ahora, ejecutemos un contenedor simple que inicialmente no esté conectado a my-network. Ejecutaremos un contenedor alpine en modo desatendido (-d) y lo llamaremos my-container.

docker run -d --name my-container alpine sleep infinity

La salida será el ID del contenedor:

<container_id>

Para verificar que el contenedor está en ejecución y no está conectado a my-network, puede inspeccionar la configuración de red del contenedor.

docker inspect my-container --format '{{json .NetworkSettings.Networks}}'

La salida mostrará la red bridge predeterminada, pero no my-network:

{
  "bridge": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Ahora, conectemos el contenedor en ejecución my-container a la red my-network utilizando el comando docker network connect.

docker network connect my-network my-container

No habrá salida si el comando se ejecuta correctamente.

Para verificar que el contenedor ahora está conectado a my-network, inspeccione la configuración de red del contenedor nuevamente.

docker inspect my-container --format '{{json .NetworkSettings.Networks}}'

Esta vez, la salida debería mostrar tanto la red bridge predeterminada como my-network:

{
  "bridge": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  },
  "my-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Finalmente, limpiemos el contenedor y la red que creamos.

docker stop my-container
docker rm my-container
docker network rm my-network

Conectar un contenedor a una red al iniciarlo

En este paso, aprenderá cómo conectar un contenedor Docker a una red específica al iniciarlo. Esta es la forma más común de garantizar que sus contenedores estén en la red correcta desde el principio.

Primero, creemos una nueva red llamada app-network que usaremos.

docker network create app-network

Debería ver una salida similar a esta, lo que indica que la red se creó correctamente:

<network_id>

Ahora, ejecutaremos un simple contenedor nginx y lo conectaremos directamente a la red app-network al iniciarlo. Usamos la opción --network seguida del nombre de la red. También lo ejecutaremos en modo desatendido (-d) y lo llamaremos web-server.

docker run -d --name web-server --network app-network nginx

La salida será el ID del contenedor:

<container_id>

Para verificar que el contenedor está conectado a app-network, puede inspeccionar la configuración de red del contenedor.

docker inspect web-server --format '{{json .NetworkSettings.Networks}}'

La salida debería mostrar que el contenedor está conectado a app-network:

{
  "app-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Tenga en cuenta que esta vez, el contenedor solo está conectado a app-network y no a la red bridge predeterminada, porque especificamos la red durante el comando docker run.

Finalmente, limpiemos el contenedor y la red.

docker stop web-server
docker rm web-server
docker network rm app-network

Especificar la dirección IP para un contenedor en una red

En este paso, aprenderá cómo asignar una dirección IP estática específica a un contenedor al conectarlo a una red. Por defecto, Docker asigna direcciones IP de forma dinámica desde la subred de la red. Sin embargo, en algunos casos, es posible que necesite que un contenedor tenga una dirección IP predecible.

Primero, creemos una nueva red con una subred especificada. Crearemos una red bridge llamada static-net con la subred 172.20.0.0/16.

docker network create --subnet 172.20.0.0/16 static-net

Debería ver una salida similar a esta, lo que indica que la red se creó correctamente:

<network_id>

Ahora, ejecutaremos un contenedor alpine y lo conectaremos a la red static-net, especificando una dirección IP estática utilizando la opción --ip. Asignaremos la dirección IP 172.20.0.10. Lo ejecutaremos en modo desatendido (-d) y lo llamaremos static-ip-container.

docker run -d --name static-ip-container --network static-net --ip 172.20.0.10 alpine sleep infinity

La salida será el ID del contenedor:

<container_id>

Para verificar que el contenedor tiene la dirección IP estática asignada en static-net, inspeccione la configuración de red del contenedor.

docker inspect static-ip-container --format '{{json .NetworkSettings.Networks}}'

La salida debería mostrar el contenedor conectado a static-net con la dirección IP especificada:

{
  "static-net": {
    "IPAMData": null,
    "IPAddress": "172.20.0.10",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Finalmente, limpiemos el contenedor y la red.

docker stop static-ip-container
docker rm static-ip-container
docker network rm static-net

Crear alias de red para un contenedor

En este paso, aprenderá cómo crear alias de red para un contenedor. Los alias de red proporcionan nombres alternativos que otros contenedores en la misma red pueden utilizar para resolver y conectarse al contenedor. Esto es útil para la detección de servicios dentro de una red Docker.

Primero, creemos una nueva red llamada alias-network.

docker network create alias-network

Debería ver una salida similar a esta, lo que indica que la red se creó correctamente:

<network_id>

Ahora, ejecutaremos un contenedor nginx y lo conectaremos a la red alias-network, asignando un alias de red utilizando la opción --network-alias. Asignaremos el alias web. Lo ejecutaremos en modo desatendido (-d) y lo llamaremos alias-container.

docker run -d --name alias-container --network alias-network --network-alias web nginx

La salida será el ID del contenedor:

<container_id>

Para verificar que el contenedor tiene el alias de red, inspeccione la configuración de red del contenedor.

docker inspect alias-container --format '{{json .NetworkSettings.Networks}}'

La salida debería mostrar el contenedor conectado a alias-network y listar el alias de red:

{
  "alias-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "Aliases": ["web", "alias-container"],
    "DriverOpts": null
  }
}

Tenga en cuenta la parte "Aliases":["web","alias-container"] en la salida. Docker también agrega automáticamente el nombre del contenedor como un alias.

Ahora, ejecutemos otro contenedor en la misma red e intentemos hacer ping al alias-container utilizando su alias de red web. Ejecutaremos un contenedor alpine de forma interactiva (-it) en alias-network.

docker run -it --rm --network alias-network alpine ping -c 3 web

Debería ver una salida que indique que se realizaron pings exitosos al alias-container utilizando el alias web:

PING web (<ip_address>): 56 data bytes
64 bytes from <ip_address>: seq=0 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=1 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=2 ttl=64 time=0.xxx ms

--- web ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.xxx/0.xxx/0.xxx/0.xxx ms

Esto demuestra que los contenedores en la misma red pueden resolverse y comunicarse entre sí utilizando alias de red.

Finalmente, limpiemos los contenedores y la red.

docker stop alias-container
docker rm alias-container
docker network rm alias-network

Resumen

En este laboratorio, aprendiste cómo administrar las redes de contenedores Docker utilizando el comando docker network connect. Practicaste la conexión de un contenedor en ejecución a una red existente, demostrando cómo agregar dinámicamente conectividad de red a un contenedor después de que se ha iniciado.

Además, exploraste cómo conectar un contenedor a una red específica en el momento de su creación, especificar una dirección IP estática para un contenedor en una red y crear alias de red para proporcionar nombres alternativos para un contenedor dentro de una red, mejorando la detectabilidad y la comunicación entre contenedores.