Volumenes y redes
Los volumenes resuelven persistencia. Las redes resuelven comunicacion.
Diagrama
mermaid
flowchart LR
A["Container: api"] -->|bridge network| B["Container: db"]
A --> C["Named volume: uploads"]
B --> D["Named volume: postgres_data"]
E["Host folder"] -->|bind mount| AVolumenes
Crear volumen:
bash
docker volume create postgres_dataUsarlo:
bash
docker run --name postgres-demo \
-e POSTGRES_PASSWORD=secret \
-v postgres_data:/var/lib/postgresql/data \
-d postgres:16Listar e inspeccionar:
bash
docker volume ls
docker volume inspect postgres_dataBind mounts
Un bind mount conecta una ruta del host con una ruta del contenedor:
bash
docker run --rm -v "$PWD:/app" -w /app node:20-alpine node index.jsUsalo para desarrollo local; para datos gestionados suele ser mejor volumen nombrado.
Redes
Crear red:
bash
docker network create app_netEjecutar contenedores en una red:
bash
docker run --name db --network app_net -e POSTGRES_PASSWORD=secret -d postgres:16
docker run --rm --network app_net postgres:16 psql -h db -U postgresDentro de la misma red, los contenedores se resuelven por nombre.
Buenas practicas
- Usa volumenes para bases de datos.
- Usa bind mounts para codigo en desarrollo.
- Crea redes por proyecto.
- No publiques puertos si solo otro contenedor necesita acceder.
- Nombra volumenes y redes de forma reconocible.
Errores comunes
- Ejecutar bases de datos sin volumen.
- Borrar volumenes pensando que solo borras contenedores.
- Usar
localhostentre contenedores en vez del nombre del servicio. - Publicar puertos innecesarios.
Ejercicio
Crea una red lab_net, ejecuta PostgreSQL con volumen nombrado y conecta otro contenedor a esa base usando el nombre db.
