Mira la lección en vídeo
Accede al vídeo completo de esta lección y a más contenido exclusivo con el Plan Plus.
Desbloquear Plan PlusTipos de volúmenes
Docker ofrece tres mecanismos principales para persistir datos desde un contenedor hacia el sistema host. Cada uno tiene características específicas que los hacen adecuados para diferentes escenarios de uso en entornos de desarrollo y producción.
Volumes (volúmenes)
Los volumes son el mecanismo preferido y más utilizado para persistir datos en Docker. Se almacenan en una parte del sistema de archivos del host gestionada completamente por Docker, típicamente en /var/lib/docker/volumes/
en Linux.
# Ejemplo de creación de un volumen
docker volume create mi-volumen-datos
Los volúmenes ofrecen varias ventajas significativas:
- Gestión completa por Docker: Docker se encarga de la creación, gestión y limpieza de los volúmenes
- Independencia del sistema operativo: funcionan de manera consistente en Linux, macOS y Windows
- Compartición entre contenedores: múltiples contenedores pueden montar el mismo volumen simultáneamente
- Drivers de volumen: soporte para almacenamiento remoto y en la nube mediante plugins
- Backup y migración: facilitan las operaciones de respaldo y transferencia de datos
Bind mounts
Los bind mounts conectan directamente un archivo o directorio específico del sistema host con el contenedor. A diferencia de los volúmenes, dependes de la estructura de directorios del sistema host.
# Ejemplo de bind mount
docker run -v /ruta/host:/ruta/contenedor nginx
Los bind mounts son especialmente útiles cuando:
- Desarrollo local: necesitas editar archivos desde el host y ver cambios inmediatamente en el contenedor
- Configuración específica: quieres utilizar archivos de configuración existentes del host
- Acceso directo: requieres control total sobre la ubicación exacta de los datos
Sin embargo, presentan algunas limitaciones importantes:
- Dependencia del host: la ruta debe existir en el sistema host
- Portabilidad reducida: pueden no funcionar en diferentes sistemas operativos
- Seguridad: exponen directamente el sistema de archivos del host
Tmpfs mounts
Los tmpfs mounts almacenan datos únicamente en la memoria RAM del sistema host, sin escribir nunca al disco. Esta característica los hace ideales para datos temporales y sensibles.
# Ejemplo de tmpfs mount
docker run --tmpfs /datos-temporales nginx
Las características principales de tmpfs mounts incluyen:
- Almacenamiento en memoria: datos completamente en RAM, sin persistencia en disco
- Alta velocidad: acceso extremadamente rápido a los datos
- Seguridad: no dejan rastros en el sistema de archivos
- Volatilidad: los datos desaparecen cuando el contenedor se detiene
Son perfectos para:
- Datos temporales: cachés, archivos de trabajo temporal
- Información sensible: datos que no deben persistir por seguridad
- Alto rendimiento: aplicaciones que requieren acceso muy rápido a datos temporales
Anonymous volumes vs Named volumes
Dentro de la categoría de volúmenes, Docker distingue entre dos tipos:
Anonymous volumes se crean automáticamente cuando un contenedor especifica un punto de montaje sin nombre específico:
# Docker crea un volumen anónimo automáticamente
docker run -v /var/lib/mysql mysql:8.0
Named volumes tienen un nombre específico asignado y pueden ser referenciados fácilmente:
# Volumen con nombre específico
docker run -v mysql-data:/var/lib/mysql mysql:8.0
Los named volumes son la opción recomendada para datos importantes porque:
- Facilitan la identificación y gestión
- Permiten reutilización entre diferentes contenedores
- Simplifican las operaciones de backup y restore
- Mejoran la legibilidad de los comandos y configuraciones
Esta variedad de opciones permite elegir la estrategia de persistencia más adecuada según las necesidades específicas de cada aplicación, considerando factores como rendimiento, seguridad, portabilidad y facilidad de gestión.
Montajes y persistencia
Guarda tu progreso
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
La gestión efectiva de volúmenes en Docker requiere comprender tanto los comandos de administración como las diferentes sintaxis de montaje disponibles. Esta sección te proporcionará las herramientas necesarias para implementar persistencia de datos de manera profesional.
Gestión de volúmenes con CLI
Docker proporciona un conjunto completo de comandos para administrar el ciclo de vida de los volúmenes:
Crear volúmenes
# Crear un volumen con nombre específico
docker volume create datos-aplicacion
# Crear con driver específico (por defecto: local)
docker volume create --driver local mi-volumen
Listar volúmenes existentes
# Ver todos los volúmenes
docker volume ls
# Filtrar volúmenes por criterios
docker volume ls --filter dangling=true
Inspeccionar volúmenes
# Ver detalles completos de un volumen
docker volume inspect datos-aplicacion
# Ver múltiples volúmenes
docker volume inspect vol1 vol2
Eliminar volúmenes
# Eliminar un volumen específico
docker volume rm datos-aplicacion
# Eliminar múltiples volúmenes
docker volume rm vol1 vol2 vol3
# Eliminar todos los volúmenes no utilizados
docker volume prune
El comando docker volume prune
es especialmente útil para limpieza ya que elimina todos los volúmenes que no están siendo utilizados por ningún contenedor, liberando espacio en disco.
Sintaxis de montaje: -v vs --mount
Docker ofrece dos sintaxis principales para montar volúmenes y bind mounts. Aunque ambas logran el mismo resultado, presentan diferencias importantes en legibilidad y funcionalidad.
Sintaxis -v (clásica)
# Named volume con -v
docker run -v mysql-data:/var/lib/mysql mysql:8.0
# Bind mount con -v
docker run -v /host/datos:/container/datos nginx
# Volume de solo lectura
docker run -v mysql-data:/var/lib/mysql:ro mysql:8.0
Sintaxis --mount (moderna y recomendada)
# Named volume con --mount
docker run --mount source=mysql-data,target=/var/lib/mysql mysql:8.0
# Bind mount con --mount
docker run --mount type=bind,source=/host/datos,target=/container/datos nginx
# Volume de solo lectura con --mount
docker run --mount source=mysql-data,target=/var/lib/mysql,readonly mysql:8.0
La sintaxis --mount
ofrece ventajas significativas:
- Mayor claridad: los parámetros son explícitos y autodocumentados
- Validación mejorada: errores más descriptivos si la configuración es incorrecta
- Funcionalidades avanzadas: acceso a opciones más granulares
- Consistencia: sintaxis unificada para diferentes tipos de montaje
Persistencia con bases de datos
Las bases de datos representan el caso de uso más común para la persistencia de datos. Aquí tienes ejemplos prácticos con MySQL y PostgreSQL:
MySQL con volúmenes
# Crear volumen específico para MySQL
docker volume create mysql-data
# Ejecutar MySQL con persistencia
docker run -d \
--name mysql-server \
--mount source=mysql-data,target=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=mi-password \
-p 3306:3306 \
mysql:8.0
PostgreSQL con volúmenes
# Crear volumen para PostgreSQL
docker volume create postgres-data
# Ejecutar PostgreSQL con persistencia
docker run -d \
--name postgres-server \
--mount source=postgres-data,target=/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=mi-password \
-e POSTGRES_DB=mi-database \
-p 5432:5432 \
postgres:16
Diferencias prácticas: volumes vs bind mounts
Comprender cuándo usar cada tipo de montaje es crucial para el éxito de tus aplicaciones:
Usa volumes cuando:
- Datos de producción: información crítica que debe persistir de manera segura
- Compartir entre contenedores: múltiples servicios accediendo a los mismos datos
- Portabilidad: la aplicación debe funcionar en diferentes entornos
- Gestión por Docker: prefieres que Docker maneje la ubicación y limpieza
Usa bind mounts cuando:
- Desarrollo activo: necesitas editar archivos desde el host y ver cambios inmediatos
- Configuración existente: tienes archivos de configuración específicos en el host
- Integración con herramientas del host: editores, IDEs o scripts que trabajan con archivos locales
- Control total: requieres especificar exactamente dónde se almacenan los datos
Ejemplo comparativo de desarrollo vs producción:
# Desarrollo: bind mount para edición en tiempo real
docker run -v /mi/proyecto:/app/codigo \
--mount type=bind,source=/mi/config,target=/app/config \
mi-app:dev
# Producción: volumes para datos críticos
docker run --mount source=app-data,target=/app/data \
--mount source=app-logs,target=/app/logs \
mi-app:prod
Buenas prácticas para persistencia
1. Nomenclatura consistente:
# Usar nombres descriptivos y consistentes
docker volume create mysql-prod-data
docker volume create redis-cache-data
docker volume create nginx-logs
2. Separación de datos por tipo:
# Separar datos de aplicación y logs
docker run --mount source=app-data,target=/app/data \
--mount source=app-logs,target=/app/logs \
mi-aplicacion
3. Configuración de solo lectura cuando sea apropiado:
# Archivos de configuración como solo lectura
docker run --mount type=bind,source=/host/config,target=/app/config,readonly \
mi-aplicacion
4. Verificación de persistencia:
# Comprobar que los datos persisten después de recrear el contenedor
docker run --name test-mysql \
--mount source=mysql-data,target=/var/lib/mysql \
mysql:8.0
# Detener y eliminar contenedor
docker stop test-mysql && docker rm test-mysql
# Crear nuevo contenedor con el mismo volumen
docker run --name nuevo-mysql \
--mount source=mysql-data,target=/var/lib/mysql \
mysql:8.0
Esta aproximación sistemática a la persistencia garantiza que tus datos se mantengan seguros y accesibles, independientemente del ciclo de vida de los contenedores. La elección correcta entre volúmenes y bind mounts, combinada con una nomenclatura clara y prácticas de verificación, forma la base de una arquitectura de datos robusta en Docker.
Aprendizajes de esta lección de Docker
- Comprender los diferentes tipos de volúmenes en Docker: volumes, bind mounts y tmpfs mounts.
- Aprender a crear, listar, inspeccionar y eliminar volúmenes mediante la CLI de Docker.
- Diferenciar entre anonymous volumes y named volumes y sus usos recomendados.
- Conocer las sintaxis -v y --mount para montar volúmenes y bind mounts, y sus ventajas.
- Aplicar buenas prácticas para la persistencia de datos en entornos de desarrollo y producción.
Completa este curso de Docker y certifícate
Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.
Asistente IA
Resuelve dudas al instante
Ejercicios
Practica con proyectos reales
Certificados
Valida tus conocimientos
Más de 25.000 desarrolladores ya se han certificado con CertiDevs