Entendiendo la Persistencia de Datos
Por defecto, los datos dentro de un contenedor son efímeros — se pierden cuando el contenedor se elimina. Docker proporciona tres mecanismos para persistir datos:
- Volúmenes: Gestionados por Docker, almacenados en el área Docker del sistema de archivos del host
- Montajes Bind: Mapean un directorio del host directamente al contenedor
- Montajes tmpfs: Almacenados solo en memoria del host, nunca escritos en disco
Volúmenes Docker
# Crear un volumen nombrado
docker volume create mis-datos
# Listar todos los volúmenes
docker volume ls
# Inspeccionar un volumen
docker volume inspect mis-datos
# Eliminar un volumen
docker volume rm mis-datos
Usar Volúmenes con Contenedores
# Montar un volumen nombrado
docker run -d \
--name postgres-db \
-v pgdata:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=secreto \
postgres:16
Montajes Bind
Los montajes bind mapean un directorio específico del host a un directorio en el contenedor. Son ideales para desarrollo cuando quieres recarga de código en vivo.
# Montaje bind para desarrollo (recarga en vivo)
docker run -d \
--name app-dev \
-v $(pwd)/src:/app/src \
-p 3000:3000 \
miapp:dev
Ejemplo Práctico: Base de Datos con Almacenamiento Persistente
# Crear un volumen para datos de PostgreSQL
docker volume create postgres-data
# Ejecutar PostgreSQL con almacenamiento persistente
docker run -d \
--name mi-postgres \
-v postgres-data:/var/lib/postgresql/data \
-e POSTGRES_USER=admin \
-e POSTGRES_PASSWORD=seguro123 \
-e POSTGRES_DB=miapp \
-p 5432:5432 \
postgres:16
# ¡Los datos sobreviven a la eliminación del contenedor!
Cuándo Usar Cada Uno
- 📁 Volúmenes: Bases de datos en producción, datos persistentes de aplicaciones
- 🔗 Montajes Bind: Desarrollo (recarga de código en vivo), archivos de configuración
- 💾 tmpfs: Datos sensibles que nunca deben escribirse en disco