Saltar al contenido

Volúmenes Docker vs bind mounts: cuándo usar cada uno

6 min de lectura Infraestructura
  • docker
  • volumes
  • bind-mounts
  • persistencia
  • infraestructura

Los contenedores Docker son efímeros por naturaleza: cuando un contenedor se detiene o se elimina, los datos que estaban dentro de su capa de escritura se pierden. Para que las aplicaciones sean útiles en producción, necesitamos una forma de que los datos persistan a través del ciclo de vida de los contenedores. Aquí es donde entran en juego los Docker volumes y los bind mounts, las dos principales estrategias para la persistencia de datos.

Ambas opciones permiten que los contenedores accedan a datos almacenados fuera de su sistema de archivos interno. La diferencia principal reside en cómo se gestionan esos datos y el nivel de control que tienes sobre la ubicación en el sistema host.

Entendiendo los Docker Volumes para persistencia de datos

Los volúmenes Docker son la forma preferida y recomendada por Docker para persistir datos. Docker gestiona estos volúmenes directamente, lo que significa que se crean y se montan en puntos específicos dentro del contenedor, pero su ubicación exacta en el host puede ser abstracta.

Cuando utilizas volúmenes Docker, le estás diciendo a Docker que se encargue de la gestión del almacenamiento. Esto los hace muy portátiles y fáciles de gestionar, incluyendo la creación de backups automáticos con rsync para tu VPS, porque Docker sabe dónde están y cómo tratarlos. Mi regla es usarlos siempre que la aplicación no necesite acceder directamente a archivos específicos del host.

Para crear y usar un volumen, el proceso es sencillo:

# Crear un volumen
docker volume create mi-volumen-datos

# Ejecutar un contenedor usando el volumen
docker run -d --name mi-app -v mi-volumen-datos:/app/data nginx

Qué son los bind mounts y sus casos de uso

Los bind mounts te permiten montar un directorio o un archivo desde el sistema de archivos del host directamente dentro del contenedor. Aquí el control es total: tú decides la ruta exacta en el host que quieres compartir con el contenedor. Esto es útil para desarrollo local o cuando necesitas que el contenedor acceda a configuraciones o archivos específicos del sistema operativo host.

La diferencia entre volúmenes Docker y bind mounts no es su capacidad para persistir datos, sino la capa de abstracción y gestión. Con un bind mount, el ciclo de vida del dato está ligado al ciclo de vida del host, no al del contenedor o al de Docker.

Un ejemplo práctico es montar el código fuente de una aplicación durante el desarrollo para ver los cambios en tiempo real:

# Montar el directorio actual del host en /app dentro del contenedor
docker run -d --name mi-dev-app -v $(pwd):/app mi-imagen-dev

Comparativa directa: Docker Volumes vs. Bind Mounts

Ambas opciones tienen sus fortalezas y debilidades. La elección depende del contexto de uso y de las prioridades del proyecto.

CaracterísticaDocker VolumesBind Mounts
GestiónGestionado por DockerGestionado por el usuario y el sistema operativo
Ubicación hostGeneralmente /var/lib/docker/volumes/Cualquier ruta del host especificada por el usuario
PortabilidadAlta, fácil de mover entre hosts DockerBaja, depende de la estructura de directorios del host
RendimientoOptimizado por Docker, buen rendimientoDepende directamente del rendimiento del disco del host
SeguridadMayor aislamiento, Docker gestiona permisosEl contenedor puede acceder a cualquier cosa en la ruta del host
Casos de usoBases de datos, datos de aplicaciones, cachéDesarrollo, configuraciones del host, logs

Ventajas y desventajas de Docker Volumes y Bind Mounts

Lo que ganas con Docker Volumes:

  • Portabilidad: Los volúmenes son fáciles de hacer backup, migrar y compartir entre diferentes hosts Docker.
  • Aislamiento: Docker gestiona la ubicación y los permisos, lo que añade una capa de seguridad y simplifica la gestión de datos persistentes para tus aplicaciones.
  • Integración: Funcionan bien con Docker Compose y Docker Swarm, facilitando la orquestación.

Con Docker Volumes, el acceso directo a los archivos desde el sistema del host no es tan sencillo sin usar comandos Docker, y la depuración puede ser menos intuitiva si necesitas inspeccionar o modificar archivos directamente en el volumen.

Lo que ganas con Bind Mounts:

  • Control total: Tienes control absoluto sobre la ubicación de los datos en el sistema de archivos del host.
  • Desarrollo local: Ideal para montar código fuente durante el desarrollo, permitiendo cambios instantáneos sin reconstruir la imagen.
  • Configuración del host: Útil para compartir archivos de configuración del sistema o logs con los contenedores.

Lo que complicas con Bind Mounts:

  • Portabilidad: Menor portabilidad; si el path del host no existe en el nuevo sistema, el contenedor fallará.
  • Seguridad: Un contenedor malicioso podría acceder a directorios sensibles del host si el bind mount no está configurado con cuidado.
  • Dependencia del host: Acopla el contenedor a la estructura de directorios del host, lo que puede ser problemático en entornos de producción.

Mi criterio de elección en producción

Cuando un cliente me llega con una aplicación Docker, mi primera opción para la persistencia de datos casi siempre son los volúmenes Docker. Son más robustos, portátiles y se integran mejor en un ecosistema de contenedores para producción. Esto incluye bases de datos, datos de usuario o cualquier información que la aplicación necesite mantener. Si aún estás en la fase de planificación de tu infraestructura, una guía para elegir proveedor de hosting puede ser un buen punto de partida. Y si necesitas decidir entre hosting compartido o VPS, ahí te explico las señales que indican que ya necesitas control total de tu servidor.

Los bind mounts los reservo para entornos de desarrollo local, donde la conveniencia de ver cambios en tiempo real supera los riesgos de producción. También los uso para casos muy específicos, como montar un archivo de configuración de Nginx desde el host que quiero que varios contenedores compartan, o para recopilar logs del host. Si quieres ver mi stack completo de Docker en producción, tengo un artículo sobre por qué uso Docker y Traefik. La clave es entender que cada uno tiene su propósito y no intentar forzar una solución donde no encaja.

Si estás montando tu infraestructura Docker, te interesa saber cómo proteger el acceso a tus servidores. Eliminar el SSH público y acceder solo por Cloudflare Tunnel como única puerta de entrada al VPS es una estrategia de seguridad que aplico. Para asegurar que tus datos persistentes están a salvo, es fundamental tener un sistema de backups automáticos con rsync para tu VPS bien configurado.

Lucas Juárez
Lucas Juárez

Técnico freelance especializado en desarrollo a medida, automatizaciones con IA y gestión técnica para negocios en España. Más sobre mí →

Compartir:

¿Necesitas que alguien se ocupe de tu web?

Me encargo de que tu web funcione, esté segura y actualizada. Backups, actualizaciones y soporte directo. Planes desde 49 €/mes.

Chat