5.1 Configuración de redes
Vamos a revisar en detalle cómo configurar redes y volúmenes para nuestra aplicación multicontenedor. Esto garantizará la interacción correcta entre servicios y el almacenamiento duradero de datos.
Las redes de Docker permiten que los contenedores interactúen entre sí. En nuestra aplicación usaremos una red de tipo bridge para la conexión entre el frontend, el backend y la base de datos.
Creación de una red
Ya definimos la red task-network en el archivo docker-compose.yml:
networks:
task-network:
driver: bridge
Dónde:
- task-network: el nombre de la red que se usará para la interacción de los contenedores.
- driver:
bridge: el tipo de red. La redbridgees estándar para la conexión de contenedores en un mismo host.
Conexión de servicios a la red
Conectamos todos los servicios a esta red en el archivo docker-compose.yml. Verifiquemos que cada servicio esté correctamente conectado:
Ejemplo para el frontend:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
Ejemplo para el backend:
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
Ejemplo para la base de datos:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
5.2 Configuración de volúmenes
Los volúmenes de Docker permiten guardar los datos de los contenedores en el sistema host, asegurando su almacenamiento a largo plazo. En nuestra aplicación, vamos a usar un volumen para almacenar los datos de la base de datos PostgreSQL.
Creación de un volumen
Ya hemos definido el volumen db-data en el archivo compose.yaml:
volumes:
db-data:
Dónde:
-
db-data: es el nombre del volumen que será usado para almacenar los datos de la base de datos PostgreSQL.
Conexión del volumen al servicio de base de datos
Hemos conectado el volumen db-data al servicio de base de datos en el archivo docker-compose.yml. Asegúrate de que esto está configurado correctamente:
Ejemplo para la base de datos:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
Dónde:
-
volumes: define qué volúmenes serán conectados al contenedor. -
db-data:/var/lib/postgresql/data: conecta el volumendb-datacon el directorio/var/lib/postgresql/datadentro del contenedor. Este directorio es usado por PostgreSQL para almacenar datos.
5.3 Archivo completo compose.yaml
Para mayor claridad y completitud, aquí tienes el archivo completo compose.yaml, que incluye la configuración de redes y volúmenes:
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
networks:
task-network:
driver: bridge
volumes:
db-data:
Comprobación de la configuración de redes y volúmenes
Después de configurar las redes y los volúmenes, asegúrate de que todo esté correctamente configurado y funcionando bien:
- 1. Iniciar los contenedores:
Terminal
docker compose up - 2. Comprobar la red:
- Usa el comando
docker network lspara confirmar que la redtask-networkse haya creado. - Usa el comando
docker network inspect task-networkpara verificar que todos los contenedores estén conectados a esta red.
- Usa el comando
- 3. Comprobar los volúmenes:
- Usa el comando
docker volume lspara confirmar que el volumendb-datase haya creado. - Usa el comando
docker volume inspect db-datapara verificar los detalles del volumen.
- Usa el comando
GO TO FULL VERSION