What is an external network in Docker?

An external network in Docker is a network that is created outside the scope of a specific Docker Compose file or Docker application, allowing multiple containers across different applications to communicate seamlessly.
Índice
¿Qué es una red externa en Docker? Parte 2

Comprender las redes externas en DockerDocker permite la creación de redes para facilitar la comunicación entre contenedores. Las redes externas son aquellas que se crean fuera del contexto de un archivo Compose y se pueden referenciar en múltiples proyectos.Para crear una red externa, se utiliza el comando:```bash docker network create -d bridge my-network ```Luego, en el archivo docker-compose.yml, se puede referenciar esta red externa:```yaml version: '3' services: web: image: nginx networks: - my-networknetworks: my-network: external: true ```Esto permite que el servicio "web" se conecte a la red "my-network" que fue creada previamente.Las redes externas son útiles cuando se necesita compartir una red entre múltiples proyectos de Docker Compose o cuando se desea mantener una red persistente independiente de los servicios que la utilizan.Es importante tener en cuenta que si se elimina un servicio que utiliza una red externa, la red en sí no se eliminará automáticamente. Esto permite mantener la configuración de red consistente en diferentes entornos o proyectos.

Docker ha revolucionado fundamentalmente la forma en que los desarrolladores construyen, envían y ejecutan aplicaciones. Una de sus características principales es la red, que permite que los contenedores se comuniquen entre sí y con el mundo exterior. Entre las diversas opciones de red que Docker proporciona, las redes externas juegan un papel esencial en la facilitación de la comunicación entre contenedores a través de diferentes proyectos y aplicaciones. En este artículo, exploraremos qué son las redes externas, cómo se diferencian de otros tipos de redes y sus aplicaciones prácticas dentro de los entornos Docker.

What Are Docker Networks?

Antes de adentrarse en redes externas, es imperativo comprender el concepto de redes de Docker. Docker utiliza una interfaz de red virtual para permitir que los contenedores se comuniquen entre sí y con el sistema anfitrión. Docker admite varios tipos de redes:

  1. Bridge NetworkEste es el tipo de red predeterminado para los contenedores. Permite que los contenedores se comuniquen entre sí en el mismo host.

  2. Red de acogida: In this mode, containers share the host’s network stack. This results in improved performance, but it can create security concerns.

  3. Red Superpuesta: Este tipo permite que los contenedores en diferentes hosts se comuniquen entre sí, facilitando el despliegue de aplicaciones de contenedores multi-host que se utilizan típicamente en Docker Swarm y Kubernetes.

  4. Macvlan Network: This type allows you to assign a MAC address to a container, making it appear as a physical device on the network.

What Is an External Network?

An external network in Docker is a network that is created outside of Docker’s management system, meaning it isn’t created by Docker Compose or Docker Swarm services. Instead, it’s a standalone network that can be shared among multiple Docker projects and services. External networks enable better management of complex applications that may require inter-service communication across different containerized environments.

Características clave de las redes externas:

  1. Acceso CompartidoVarios archivos o servicios de Docker Compose pueden conectarse a la misma red externa, lo que permite una comunicación sin problemas entre contenedores gestionados por diferentes aplicaciones.

  2. Creación manual: External networks must be created beforehand using the docker network create comando, en lugar de crearse automáticamente por Docker Compose.

  3. Persistencia: Once created, external networks persist until explicitly removed, allowing for consistent inter-service communication across different deployments.

Creación de una Red Externa

Para crear una red externa, puedes usar la CLI de Docker. Aquí tienes una guía paso a paso:

  1. Abre tu terminal.

  2. Ejecuta el siguiente comando:

    docker network create my_external_network
  3. Verificar la creación:

    docker red ls

    Deberías ver mi red externa listado entre las redes disponibles.

Using External Networks in Docker Compose

Once you have created an external network, you can reference it in your Docker Compose file. This is particularly useful for microservices architectures where different services might need to communicate across distinct applications.

Aquí tienes una muestra. docker-compose.yml Archivo que muestra cómo usar una red externa:

version: '3'

servicios:
  web:
    image: nginx
    networks:
      - my_external_network

  app:
    image: myapp
    networks:
      - my_external_network

networks:
  my_external_network:
    external: true

In this example, both the web and app Los servicios se conectan a mi red externa red externa. Esta configuración permite... web servicio (en ejecución con Nginx) app servicio (su aplicación) para comunicarse entre sí, incluso si forman parte de diferentes proyectos de Docker Compose siempre que hagan referencia a la misma red externa.

Beneficios de utilizar redes externasLas redes externas ofrecen una serie de ventajas significativas para las empresas y organizaciones que buscan expandir su alcance y mejorar sus operaciones. Algunos de los beneficios clave incluyen:1. Acceso a nuevos mercados: Las redes externas permiten a las empresas llegar a clientes y socios potenciales en diferentes regiones geográficas, lo que puede conducir a un aumento en las ventas y oportunidades de negocio.2. Colaboración mejorada: Facilitan la colaboración con otras empresas, instituciones académicas y organizaciones gubernamentales, lo que puede resultar en proyectos conjuntos, investigación y desarrollo compartidos, y acceso a nuevos conocimientos y tecnologías.3. Reducción de costos: Al aprovechar la infraestructura y los recursos de las redes externas, las empresas pueden reducir sus costos operativos y de capital, especialmente en áreas como la tecnología de la información y las comunicaciones.4. Flexibilidad y escalabilidad: Las redes externas ofrecen la flexibilidad de adaptarse rápidamente a las cambiantes necesidades del negocio y la capacidad de escalar las operaciones según sea necesario.5. Mejora de la seguridad: Muchas redes externas ofrecen medidas de seguridad avanzadas, lo que puede ayudar a proteger los datos y sistemas de una empresa contra amenazas cibernéticas.6. Acceso a talento especializado: Las redes externas pueden proporcionar acceso a profesionales y expertos en diversas áreas, lo que puede ser especialmente beneficioso para empresas que buscan desarrollar nuevas capacidades o resolver problemas específicos.7. Innovación acelerada: Al conectarse con una amplia gama de socios y recursos, las empresas pueden acelerar su proceso de innovación y llevar nuevos productos y servicios al mercado más rápidamente.8. Mejora de la reputación: La participación en redes externas puede mejorar la reputación de una empresa y su posición en la industria, lo que puede conducir a una mayor confianza por parte de los clientes y socios comerciales.9. Cumplimiento normativo: Algunas redes externas pueden ayudar a las empresas a cumplir con los requisitos regulatorios y normativos, especialmente en industrias altamente reguladas.10. Sostenibilidad: Las redes externas pueden facilitar prácticas comerciales más sostenibles al permitir el intercambio de recursos y la reducción de residuos.En resumen, el uso de redes externas puede proporcionar a las empresas una ventaja competitiva significativa al expandir su alcance, mejorar la eficiencia operativa y fomentar la innovación.

El uso de redes externas aporta varias ventajas a las aplicaciones containerizadas.

  1. Separación de Responsabilidades: By using external networks, you maintain a clear separation between different applications and their networks. This makes it easier to manage and understand the flow of data within your architecture.

  2. Escalabilidad: External networks make it easier to scale applications. You can add more containers or services to the same external network without having to reconfigure the entire architecture.

  3. InteroperabilityDistintos equipos pueden trabajar en sus servicios de forma independiente, pero comunicarse a través de una red externa compartida. Esto proporciona flexibilidad y fomenta la colaboración sin necesidad de fusionar sus bases de código.

  4. Simplified Networking: External networks simplify the networking setup for complex applications. Instead of managing multiple internal networks, developers can rely on a single external network to facilitate communication.

Gestión de redes externas

Gestionar las redes externas de manera efectiva es crucial para mantener un rendimiento y seguridad óptimos en tu entorno Docker. Aquí tienes algunos comandos y prácticas clave para ayudarte a gestionar las redes externas:1. **Listar redes existentes:** ```bash docker network ls ``` Este comando muestra todas las redes disponibles en tu entorno Docker, incluyendo las redes externas.2. **Crear una nueva red externa:** ```bash docker network create --driver bridge external_network ``` Este comando crea una nueva red externa llamada `external_network` utilizando el driver `bridge`.3. **Conectar un contenedor a una red externa:** ```bash docker network connect external_network container_name ``` Este comando conecta un contenedor existente a la red externa `external_network`.4. **Desconectar un contenedor de una red externa:** ```bash docker network disconnect external_network container_name ``` Este comando desconecta un contenedor de la red externa `external_network`.5. **Inspeccionar una red externa:** ```bash docker network inspect external_network ``` Este comando proporciona información detallada sobre la red externa `external_network`, incluyendo los contenedores conectados y las configuraciones de red.6. **Eliminar una red externa:** ```bash docker network rm external_network ``` Este comando elimina la red externa `external_network`. Asegúrate de que no haya contenedores conectados a esta red antes de eliminarla.7. **Limpiar redes no utilizadas:** ```bash docker network prune ``` Este comando elimina todas las redes no utilizadas, lo que ayuda a mantener tu entorno Docker limpio y organizado.8. **Configurar la seguridad de la red:** - Utiliza el driver `overlay` para redes distribuidas en múltiples hosts. - Configura las reglas de firewall para controlar el tráfico entre redes. - Utiliza etiquetas de red para organizar y gestionar las redes de manera más eficiente.9. **Monitorear el rendimiento de la red:** - Utiliza herramientas como `docker stats` para monitorear el uso de recursos de los contenedores. - Configura alertas para detectar problemas de rendimiento en las redes externas.10. **Documentar y mantener registros:** - Mantén un registro de las redes externas y sus configuraciones. - Documenta los cambios realizados en las redes para facilitar la solución de problemas y la auditoría.Siguiendo estas prácticas y utilizando los comandos adecuados, podrás gestionar eficazmente las redes externas en tu entorno Docker, asegurando un rendimiento óptimo y una seguridad robusta.

Viewing Network Details

Para inspeccionar los detalles de una red externa, use el siguiente comando:

docker network inspect my_external_network

Este comando proporciona información detallada sobre la red, incluyendo contenedores conectados, direcciones IP y opciones de configuración.

Eliminación de una red externa

To remove an external network, you can use:

docker network rm my_external_network

Tenga en cuenta que esto solo tendrá éxito si no hay contenedores conectados actualmente a la red.

Casos de uso para redes externas

Las redes externas son especialmente beneficiosas en escenarios que involucran microservicios, aplicaciones nativas en la nube y despliegues en múltiples entornos. A continuación, se presentan algunos casos de uso:

  1. Microservices ArchitectureEn una configuración de microservicios, cada servicio puede ser un proyecto de Docker Compose separado que se conecta a la misma red externa. Esto les permite comunicarse entre sí de manera eficiente.

  2. Development vs. Production: You might want to run a development container and a production container that share the same database or API service. By using an external network, both environments can easily access shared resources.

  3. Servicios de Terceros: When integrating with third-party services or APIs, an external network can facilitate communication between your containers and external services without exposing them to the public internet.

  4. Legacy ApplicationsSi tienes sistemas heredados que necesitan coexistir con aplicaciones en contenedores, las redes externas permiten que estos sistemas interactúen sin necesidad de migrarlos por completo a Docker.

Limitaciones y Consideraciones

While external networks offer numerous benefits, there are some limitations and considerations to keep in mind:

  1. Seguridad: Exponer servicios a una red externa puede aumentar los riesgos de seguridad. Asegúrese de contar con medidas de seguridad adecuadas, como el uso de firewalls o la implementación de controles de acceso estrictos.

  2. Complejidad: La gestión de múltiples redes externas puede introducir complejidad. Es esencial realizar un monitoreo y documentación regulares para mantener un seguimiento de las configuraciones de red y sus interdependencias.

  3. PerformanceLa comunicación a través de redes externas puede añadir latencia en comparación con las redes internas. Las pruebas de referencia y de rendimiento pueden ayudarle a evaluar si la red externa satisface sus necesidades.

  4. Alcance de la Red: Ensure that the external network configuration aligns with your organization’s networking policies, especially if your containers need to communicate with non-Dockerized services.

Conclusión

Las redes externas en Docker juegan un papel crucial al facilitar la comunicación entre contenedores en diferentes aplicaciones y servicios. Al permitir el acceso compartido, la creación manual y la persistencia, las redes externas permiten a los desarrolladores construir entornos containerizados flexibles, escalables y colaborativos.

As you embark on building more complex applications with Docker, understanding and leveraging external networks will empower you to create robust architectures that are well-suited for modern development practices. Whether you are working with microservices, integrating legacy systems, or developing cloud-native applications, external networks provide the tools you need to manage inter-service communication effectively.

Al aplicar mejores prácticas en la gestión de redes externas, puede mejorar el rendimiento, la seguridad y la escalabilidad de sus aplicaciones containerizadas, garantizando que satisfagan las demandas del panorama de desarrollo actual.