6. Volúmenes y persistencia de datos
En Docker, los datos almacenados en un contenedor se eliminan al detener o eliminar ese contenedor, salvo que se usen mecanismos de persistencia. Para evitar perder información valiosa (por ejemplo, bases de datos, archivos de configuración, etc.), Docker proporciona volúmenes y también permite montar carpetas locales del host.
¿Qué es un volumen?
Un volumen es un mecanismo de almacenamiento persistente gestionado por Docker. Se encuentra fuera del sistema de archivos del contenedor y se almacena en el host (por defecto en /var/lib/docker/volumes/).
Crear volumen manualmente
docker volume create datos_postgres
Usarlo en un contenedor
docker run -v datos_postgres:/var/lib/postgresql/data postgres
Volúmenes en Docker Compose
services:
db:
image: postgres
volumes:
- datos_db:/var/lib/postgresql/data
volumes:
datos_db:
Los volúmenes declarados abajo (volumes:) son gestionados por Docker y pueden ser reutilizados por múltiples contenedores.
Carpetas del host: alternativa accesible
Una alternativa muy útil (especialmente en desarrollo) es montar una carpeta del host directamente en el contenedor:
volumes:
- ./mi-carpeta:/app/datos
Esto tiene varias ventajas:
- Los archivos están accesibles desde el sistema anfitrión
- Se pueden editar con cualquier editor de texto
- Facilita backups y control de versiones
- Ideal para montar código fuente, configuraciones, o datos que se quieran inspeccionar o editar
Sin embargo:
- Dependes de la estructura del host
- Puede haber diferencias de permisos entre sistemas
Ver y gestionar volúmenes
docker volume ls
docker volume inspect nombre_del_volumen
docker volume rm nombre_del_volumen
También se pueden eliminar automáticamente con:
docker compose down -v
Comparación rápida
| Método | Persistencia | Visible en host | Ideal para |
|---|---|---|---|
| Volumen de Docker | Sí | No directamente | Producción, bases de datos |
| Carpeta del sistema | Sí | Sí | Desarrollo, edición directa |
Buenas prácticas
- Usa volúmenes en producción para mayor aislamiento
- Usa carpetas locales en desarrollo para editar fácilmente
- Siempre ignora carpetas de datos en
.gitignore - Automatiza copias de seguridad desde los volúmenes si contienen datos sensibles