Almacenamiento: Volúmenes Administrados, Bind Mounts y tmpfs
Por defecto, todos los archivos creados dentro de un contenedor se almacenan en su capa de escritura temporal (Writable Container Layer). Cuando el contenedor se elimina, todos esos datos se destruyen con él.
Para persistir datos o compartirlos entre el host y los contenedores, Docker ofrece 3 tipos principales de montajes de almacenamiento.
1. Comparativa de los 3 Tipos de Almacenamiento #
1┌─────────────────────────────────────────────────────────────────────────────┐ 2│ SISTEMA ANFITRIÓN (HOST) │ 3│ │ 4│ ┌───────────────────────┐ ┌───────────────────────┐ ┌─────────────────┐ │ 5│ │ VOLÚMENES DOCKER │ │ BIND MOUNTS │ │ TMPFS MOUNTS │ │ 6│ │ /var/lib/docker/vol/ │ │ /home/usuario/codigo/ │ │ Memoria RAM del │ │ 7│ │ (Gestionado por │ │ (Cualquier ruta del │ │ host (Volátil) │ │ 8│ │ el demonio Docker) │ │ sistema de archivos) │ │ │ │ 9│ └───────────┬───────────┘ └───────────┬───────────┘ └────────┬────────┘ │ 10└──────────────┼──────────────────────────┼───────────────────────┼───────────┘ 11 ▼ ▼ ▼ 12┌─────────────────────────────────────────────────────────────────────────────┐ 13│ CONTENEDOR EN EJECUCIÓN │ 14└─────────────────────────────────────────────────────────────────────────────┘
| Tipo de Montaje | Dónde reside físicamente | Gestión | Caso de Uso Ideal |
|---|---|---|---|
| Named Volume | Área administrada por Docker (/var/lib/docker/volumes/). | Exclusiva del demonio de Docker. | Bases de datos y persistencia en producción (PostgreSQL, MySQL, Redis). |
| Bind Mount | Cualquier directorio del host (ej. $(pwd)/src). | Control total del usuario y del OS host. | Desarrollo en local con recarga en caliente (Hot Reloading / nodemon / vite). |
| tmpfs Mount | En la memoria RAM del sistema anfitrión. | Kernel del sistema operativo. | Secretos, claves criptográficas y cachés que nunca deben escribirse en disco. |
2. Sintaxis Moderna --mount vs Sintaxis Clásica -v #
La sintaxis moderna con el flag --mount es más explícita y recomendada por la documentación oficial de Docker frente a la sintaxis condensada -v:
Montaje de Volumen Administrado: #
1# Sintaxis moderna --mount 2docker run -d \ 3 --name db-prod \ 4 --mount type=volume,source=postgres_data,target=/var/lib/postgresql/data \ 5 postgres:16-alpine 6 7# Sintaxis clásica equivalente -v 8docker run -d --name db-prod -v postgres_data:/var/lib/postgresql/data postgres:16-alpine
Montaje de Bind Mount (Desarrollo en Vivo): #
1# Sintaxis moderna --mount con modo solo lectura 2docker run -d \ 3 --name api-dev \ 4 -p 3000:3000 \ 5 --mount type=bind,source="$(pwd)",target=/usr/src/app,readonly \ 6 node:20-alpine
Montaje en Memoria RAM (tmpfs): #
1# Sintaxis moderna --mount en memoria RAM de 128 MB 2docker run -d \ 3 --name app-secreta \ 4 --mount type=tmpfs,destination=/app/secrets,tmpfs-size=128m \ 5 mi-app:latest
Resumen del tema
Conceptos clave #
- Named Volumes: la opción más segura y eficiente para producción; no dependen de la estructura de carpetas del host.
- Bind Mounts: vinculan una carpeta local del anfitrión al contenedor; indispensables para modificar código en tiempo real durante el desarrollo.
- tmpfs Mounts: residen exclusivamente en memoria RAM, ideales para almacenar datos sensibles o archivos temporales de alta velocidad sin desgaste de disco.
- Flag
--mount: sintaxis estructurada con pares clave-valor (type=...,source=...,target=...,readonly).
Qué debes recordar #
Usa Named Volumes para persistir datos de producción en bases de datos, Bind Mounts para desarrollo en vivo y tmpfs para datos sensibles que nunca deben tocar el disco.