Saltar al contenido principal

💾 Volúmenes en Docker

Hasta ahora hemos aprendido a construir imágenes y ejecutar contenedores, pero existe un problema importante:

Los contenedores son efímeros.

Esto significa que si eliminas un contenedor, toda la información almacenada dentro de él desaparece.

Por ejemplo:

  • Una base de datos
  • Archivos subidos por los usuarios
  • Archivos físicos generados por la aplicación

Todo ese contenido se perderá si no utilizamos un mecanismo de persistencia.

📦 ¿Qué son los volúmenes?

Los Docker Volumes permiten almacenar datos fuera del ciclo de vida del contenedor.

De esta forma, aunque el contenedor sea eliminado, los datos siguen existiendo y pueden reutilizarse posteriormente.

🛠️ Crear un volumen

Crear un volumen es muy sencillo:

docker volume create datos-db

Después, al iniciar un contenedor, podemos indicar que utilice ese volumen mediante el parámetro -v.

En el ejemplo de la clase se crea un contenedor de PostgreSQL utilizando un volumen persistente para almacenar los datos de la base de datos.

⚙️ Utilizando un volumen en un contenedor

Además de las opciones habituales como:

  • -d (detach)
  • --name
  • -e (variables de entorno)
  • -p (puertos)

se añade:

  • -v para indicar el volumen que utilizará el contenedor.

Gracias a ello, los datos dejarán de depender del propio contenedor.

🗄️ Probando la persistencia

Durante la clase se demuestra el funcionamiento utilizando PostgreSQL.

Primero se:

  • crea una tabla,
  • inserta un usuario,
  • verifica que los datos existen.

Después se elimina completamente el contenedor y se crea otro nuevo utilizando exactamente el mismo volumen.

✅ Los datos siguen existiendo

Aunque el contenedor original desaparece, la nueva instancia puede acceder a la misma base de datos.

Esto demuestra que:

  • el volumen conserva la información,
  • varios contenedores pueden reutilizar el mismo volumen,
  • los datos sobreviven al ciclo de vida del contenedor.

♻️ Reutilizar un volumen

Una de las mayores ventajas es que un volumen puede compartirse entre distintos contenedores.

Esto permite, por ejemplo:

  • reutilizar una misma base de datos,
  • mantener copias persistentes,
  • compartir información entre servicios,
  • facilitar estrategias de respaldo.

🧹 Eliminar un volumen

Eliminar un contenedor no elimina automáticamente su volumen.

Si queremos borrar definitivamente los datos almacenados debemos hacerlo manualmente:

docker volume rm datos-db

Solo entonces desaparecerá la información persistida.

🔗 Bind Mounts

Además de los volúmenes tradicionales, Docker ofrece otra opción muy utilizada durante el desarrollo:

Bind Mounts.

En lugar de almacenar datos en un volumen administrado por Docker, un Bind Mount enlaza una carpeta real de nuestro ordenador con una carpeta del contenedor.

💻 Ideal para desarrollo

Este tipo de montaje permite:

  • editar archivos desde tu editor favorito,
  • que el contenedor vea inmediatamente esos cambios,
  • trabajar sin tener que reconstruir continuamente la imagen.

🚀 Ejecutando un Bind Mount

En la demostración se crea un pequeño servidor Node.js y se ejecuta un contenedor enlazando la carpeta actual (PWD) con el directorio /app del contenedor mediante -v.

📂 Compartiendo archivos entre máquina y contenedor

El ejemplo utiliza un archivo visitas.txt para almacenar un contador.

Al modificar ese archivo desde el ordenador anfitrión, el contenedor utiliza inmediatamente el nuevo valor.

La información permanece sincronizada en ambos sentidos.

🔥 Hot Reload con Node

El servidor se ejecuta utilizando node --watch.

Gracias al Bind Mount:

  • cualquier cambio realizado en server.js
  • se detecta automáticamente
  • el servidor se reinicia
  • y el navegador muestra los cambios sin reconstruir la imagen.

Este flujo resulta especialmente útil durante el desarrollo local.

📌 Docker Volume vs Bind Mount

Docker Volume

  • Gestionado por Docker.
  • Pensado para persistencia de datos.
  • Ideal para bases de datos y almacenamiento permanente.

Bind Mount

  • Enlaza carpetas reales del ordenador.
  • Perfecto para desarrollo.
  • Permite editar archivos desde el host mientras el contenedor los utiliza.

Ambos utilizan la opción -v, pero están orientados a necesidades diferentes.

🎯 Ideas clave de esta clase

Quédate con estos conceptos:

  • Los contenedores son efímeros.
  • Los volúmenes permiten persistir datos.
  • Un volumen puede reutilizarse entre distintos contenedores.
  • Eliminar un contenedor no elimina su volumen.
  • Los Bind Mounts enlazan carpetas del host con el contenedor.
  • Son la herramienta ideal para el desarrollo local.
  • Combinados con herramientas como node --watch, permiten trabajar con recarga automática.

🚀 Lo siguiente

Ahora ya sabes cómo conservar datos utilizando volúmenes y cómo desarrollar aplicaciones de forma mucho más cómoda mediante Bind Mounts.

En las siguientes clases estos conceptos servirán como base para trabajar con aplicaciones reales, bases de datos y flujos de desarrollo completos dentro del ecosistema Docker.


💡 Tip: Utiliza Docker Volumes para almacenar información importante como bases de datos y Bind Mounts cuando estés desarrollando una aplicación y quieras editar el código directamente desde tu ordenador.