Para definir cómo se comunican los contenedores.
Opción por defecto. Para conectar contenedores cuando cada aplicación va en un contenedor distinto, permite que estén aislados del exterior. Para conectarse entre ellos deben ejecutarse bajo el mismo proceso de docker. A su vez cada uno tiene su propia red independiente de la que les permite interaccionar.
En el compose simplemente con poner
networks:
my-network:
es suficiente.
Podemos estar tentados (se puede hacer realmente) a hacer
service:
image: foo:latest
networks:
- my-network
networks:
my-network:
y luego conectar desde distintos docker-compose.yml. Esto tarde o temprano nos dará problemas. En un ejemplo concreto, en el que quise conectar un clúster de Kafka a una red privada ya existente y luego quise conectar también Kafka-UI a la misma red desde con su propio compose, no conseguía que éste encontrase a aquél debido a que al hacerlo de esa forma, en el primer caso se creaba una red fitosat_fitosat, mientras que en el segundo se creaba una red kafka-ui_fitosat, por lo que no había forma de que se reconociesen.
Es mejor hacer
service:
image: foo:latest
networks:
my-network:
networks:
my-network:
name: my-network
para asegurarnos de que realmente es la misma red. Se crea una con el nombre especificado, sin prefijos no esperados.