Advanced Guide to Docker Compose External Networks
Docker Compose es una herramienta poderosa que simplifica la gestión de aplicaciones Docker multi-contenedor. Una de sus capacidades, a menudo pasada por alto por los desarrolladores, es el uso de redes externas. Las redes externas permiten que los contenedores de Docker se comuniquen entre diferentes proyectos de Docker Compose o incluso con aplicaciones externas fuera del entorno Docker. Este artículo explora en profundidad el concepto de redes externas en Docker Compose, cubriendo cómo funcionan, su configuración y sus aplicaciones prácticas en escenarios del mundo real.
Comprender las redes de Docker
Before diving into external networks, it’s crucial to grasp the basics of Docker networking. Docker uses a bridge networking model by default, where each container is assigned an IP address within a network and can communicate with other containers on the same network. There are several types of networks available in Docker:
- Bridge Network: The default network type, which allows containers to communicate with each other on the same host.
- Red de acogida: Containers share the host’s network stack and can access local services directly.
- Red SuperpuestaEste tipo permite la comunicación entre contenedores a través de múltiples hosts Docker, comúnmente utilizado en configuraciones de Swarm o Kubernetes.
- Macvlan Network: Asigna una dirección MAC a un contenedor, permitiéndole actuar como un dispositivo físico en la red.
¿Qué son las redes externas?
An external network is a network that is created outside of Docker Compose’s lifecycle. This means that when you define an external network in a docker-compose.yml archivo, estás indicando a Docker Compose que utilice una red Docker existente en lugar de crear una nueva. Esto es particularmente útil cuando:- Quieres conectar múltiples servicios de Docker Compose a una red compartida que ya existe.
- Necesitas integrar servicios de Docker Compose con otros contenedores que no forman parte del stack de Docker Compose.
- Quieres tener un mayor control sobre la configuración de la red, como el rango de direcciones IP o las reglas de firewall.
- Estás trabajando en un entorno donde la red ya ha sido configurada por un administrador de red o por otro equipo.Al especificar una red existente, Docker Compose no creará una nueva red para tus servicios, sino que los conectará a la red que hayas especificado. Esto puede ser útil para mantener la consistencia en la configuración de red a través de diferentes entornos o para integrar servicios de Docker Compose con infraestructuras de red existentes.
- Se necesitan múltiples servicios o aplicaciones para que se comuniquen entre diferentes archivos de Docker Compose.
- You want to maintain shared resources for different project environments without duplicating network configurations.
Configuración de redes externasTo set up an external network, you need to create a network and a subnet. The network is the container for the subnet, and the subnet defines the IP address range and other network parameters.Creating a NetworkTo create a network, use the following command:``` openstack network create --share --external --provider-physical-network provider --provider-network-type flat external ```This command creates a network named "external" that is shared and external. The network uses the "provider" physical network and the "flat" network type.Creating a SubnetTo create a subnet, use the following command:``` openstack subnet create --network external --subnet-range 10.0.0.0/24 --gateway 10.0.0.1 --allocation-pool start=10.0.0.100,end=10.0.0.200 --dns-nameserver 8.8.8.8 external-subnet ```This command creates a subnet named "external-subnet" that is associated with the "external" network. The subnet has an IP address range of 10.0.0.0/24, a gateway of 10.0.0.1, and an allocation pool of 10.0.0.100 to 10.0.0.200. The subnet also uses the DNS nameserver 8.8.8.8.Verifying the Network and SubnetTo verify that the network and subnet were created successfully, use the following commands:``` openstack network list openstack subnet list ```These commands will display a list of all networks and subnets in your OpenStack environment. You should see the "external" network and "external-subnet" subnet in the output.ConclusionIn this section, you learned how to set up an external network in OpenStack. You created a network and a subnet, and verified that they were created successfully. In the next section, you will learn how to launch an instance and connect it to the external network.
Creación de una Red Externa
To create an external network, you can use the Docker CLI. For instance, to create an external network called mi red externa, ejecutarías:
docker network create my_external_networkThis command will create a new network in Docker that you can specify in your docker-compose.yml archivos.
Configuring Docker Compose to Use External Networks
Una vez que hayas configurado una red externa, puedes hacer referencia a ella en tu... docker-compose.yml archivo. Aquí tienes una estructura básica para cómo podrías definirlo:
versión: '3.8'
servicios:
app:
imagen: my-app-image
redes:
- my_external_network
redes:
my_external_network:
externa: trueEn este ejemplo, el app el servicio podrá conectarse a mi red externa que fue creado externamente a este archivo de Compose. external: true La clave indica que Docker Compose no debe intentar crear esta red, sino utilizar la que ya está definida.
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.
Increased Modularity
Una de las ventajas más significativas del uso de redes externas es la modularidad. Puedes separar diferentes componentes de tus aplicaciones y mantener interfaces limpias y bien definidas. Por ejemplo, si tienes un servicio que necesita interactuar con múltiples aplicaciones (como una base de datos o un intermediario de mensajes), una red externa permite un canal de comunicación compartido sin acoplar estrechamente los servicios.
Escalabilidad
A medida que su aplicación crece, la modularidad se vuelve esencial para la escalabilidad. Las redes externas permiten escalar diferentes partes de su aplicación de forma independiente. Por ejemplo, si tiene una arquitectura de microservicios, cada servicio puede escalarse según su demanda, manteniendo al mismo tiempo la comunicación a través de una red externa común.
Reutilización de recursos de redThe network resources are shared by all the users. The resources are used for the duration of the call and then released for use by other users. The resources are not dedicated to a particular user. The resources are shared by all the users. The resources are used for the duration of the call and then released for use by other users. The resources are not dedicated to a particular user.
By creating services that communicate over external networks, you can avoid duplicating network configurations across different Docker Compose files. This not only saves time but also reduces the risk of configuration errors, making it easier to manage resources.
Opciones de configuración avanzadas
Aunque la configuración básica de las redes externas es sencilla, Docker Compose ofrece diversas opciones avanzadas que pueden mejorar tu estrategia de redes. Exploremos algunas de estas opciones.
Controlador de red
Al crear una red externa, puedes especificar el controlador de red a utilizar. Docker admite diferentes controladores, como bridge, overlay, and macvlan, dependiendo de sus requisitos. Para especificar un controlador, crearía la red de la siguiente manera:
docker network create --driver overlay my_external_networkEn tu docker-compose.yml, you don’t need to redefine the driver since it is inherited from the existing network:
networks:
my_external_network:
external: trueAlias de red
Docker permite definir alias para servicios en una red. Los alias pueden ser particularmente útiles cuando deseas exponer servicios bajo nombres diferentes sin modificar el nombre real del servicio. Puedes definir alias en tu archivo docker-compose.yml. docker-compose.yml archivo como este:
services:
app:
image: my-app-image
networks:
my_external_network:
aliases:
- my_app_aliasCon esta configuración, otros servicios pueden hacer referencia a app by the alias my_app_alias when communicating over mi red externa.
Redes Externas MúltiplesEn este capítulo, aprenderá sobre:- Redes externas múltiples - Configuración de redes externas múltiples - Configuración de redes externas múltiples con el asistente de instalación - Configuración de redes externas múltiples con el asistente de configuración de redEn este capítulo, aprenderá cómo configurar múltiples redes externas en su entorno de Red Hat OpenStack Platform.
También puedes conectar un servicio a múltiples redes externas. Esto puede ser útil si necesitas que un servicio se comunique con diferentes aplicaciones o grupos de servicios. Así es como podrías configurar eso en tu docker-compose.yml:
version: '3.8'
services:
app:
image: my-app-image
networks:
- my_external_network_1
- my_external_network_2
networks:
my_external_network_1:
external: true
my_external_network_2:
external: trueAl conectar sus servicios a múltiples redes externas, estos pueden interactuar con una gama más amplia de otros servicios, mejorando la interoperabilidad.
Practical Use Cases
Microservices Architecture
En una arquitectura de microservicios, diferentes servicios a menudo necesitan comunicarse entre sí. Por ejemplo, podrías separar tu aplicación en un servicio de usuarios, un servicio de pedidos y un servicio de pagos, cada uno ejecutándose como un proyecto diferente de Docker Compose. Al utilizar redes externas, estos servicios pueden comunicarse sin problemas.
# user_service/docker-compose.yml
version: '3.8'
services:
user:
image: user-service-image
networks:
- app_network
networks:
app_network:
external: true# order_service/docker-compose.yml
version: '3.8'
services:
servicio_pedido:
image: order-service-image
networks:
- app_network
networks:
app_network:
external: trueIntegración de sistemas heredados
En muchas organizaciones, los sistemas heredados pueden no estar aún contenerizados. Al utilizar redes externas de Docker Compose, puedes crear un puente entre tus aplicaciones contenerizadas modernas y los sistemas heredados. Esto te permite migrar incrementalmente los servicios a Docker sin necesidad de una revisión completa de tu infraestructura existente.
Acceso compartido a la base de datosEn el modelo de acceso compartido a la base de datos, múltiples usuarios o aplicaciones acceden simultáneamente a la misma base de datos. Esto permite una mayor eficiencia y colaboración, ya que los datos pueden ser actualizados y consultados por diferentes partes al mismo tiempo. Sin embargo, también presenta desafíos en términos de gestión de concurrencia y control de acceso para garantizar la integridad de los datos.
Si varias aplicaciones necesitan acceder a una base de datos compartida, las redes externas pueden simplificar esta conexión. Al colocar todas las aplicaciones y la base de datos en la misma red externa, facilitas la comunicación sin exponer la base de datos al mundo exterior.
Best Practices
Convenciones de nomenclatura
Utiliza nombres claros y descriptivos para tus redes externas. Esta práctica te ayudará a gestionar tus configuraciones de manera más eficiente y reducirá la confusión a medida que tu arquitectura aumente en complejidad.
Aislamiento de red
Tenga precaución con el aislamiento de red. Si bien las redes externas promueven la comunicación, asegúrese de no exponer servicios sensibles a riesgos innecesarios. Siempre emplee prácticas de seguridad, como limitar el acceso y utilizar firewalls o políticas de red.
Documentación
Document your network architecture thoroughly. This documentation should include details about which services are connected to which external networks. Proper documentation aids in maintenance and onboarding new team members.
Conclusión
Las redes externas de Docker Compose ofrecen un método eficaz para mejorar las capacidades de comunicación de sus aplicaciones en contenedores. Al fomentar la modularidad, escalabilidad y reutilización de recursos, se convierten en un componente vital de la arquitectura moderna de aplicaciones. Al dominar las redes externas, puede optimizar sus flujos de desarrollo, facilitar interacciones fluidas entre servicios y mejorar la resiliencia general de sus aplicaciones Docker.
En la práctica, las redes externas deberían ser una consideración clave en tu estrategia de Docker, especialmente a medida que te adentras en arquitecturas más complejas como los microservicios o los entornos de nube híbrida. Al adherirte a las mejores prácticas y aprovechar las características avanzadas de Docker Compose, puedes desbloquear el potencial completo de tus aplicaciones contenerizadas. El futuro del desarrollo de aplicaciones es interconectado, y las redes externas son una parte crucial de esa evolución.
- [Redes de Docker Compose](https://docs.docker.com/compose/networking/)](https://dockerpros.com/wp-content/uploads/2024/07/docker-compose-external-networks_1278.jpg)