Cómo funcionan los volúmenes en Docker
Lección 5 del curso de Docker.
Cómo funcionan los volúmenes en Docker
El sistema de archivos de un contenedor es efímero: todo lo que se escribe dentro desaparece cuando el contenedor se elimina. Para la mayoría de aplicaciones eso es un problema (una base de datos no puede perder sus datos), y Docker lo resuelve con los volúmenes y los bind mounts.
Las tres formas de guardar datos
- Volúmenes: la opción recomendada. Docker los crea y gestiona en una zona propia del disco del anfitrión (
/var/lib/docker/volumes/). Sobreviven al contenedor y pueden compartirse entre varios. - Bind mounts: montan una carpeta concreta del anfitrión dentro del contenedor. Ideales en desarrollo, para editar código en tu máquina y ver los cambios al instante dentro del contenedor.
- tmpfs: monta un directorio en memoria RAM. Solo para datos temporales y sensibles que no deben tocarse en disco.
Trabajar con volúmenes
docker volume create datos-db # crea un volumen
docker volume ls # lista los volúmenes
docker volume inspect datos-db # detalle y ubicación real
docker volume rm datos-db # lo elimina
docker volume prune # borra los volúmenes sin uso
Para usarlo, se monta al arrancar el contenedor con -v o --mount:
docker run -d --name db \
-v datos-db:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=secreto \
postgres:16
Con esto, los datos de PostgreSQL se guardan en el volumen datos-db. Aunque borres el contenedor y crees otro montando el mismo volumen, la información seguirá ahí.
Bind mounts para desarrollo
docker run -d --name web \
-v $(pwd)/src:/usr/share/nginx/html \
-p 8080:80 nginx
La carpeta src de tu proyecto queda montada dentro del contenedor: editas en tu editor habitual y el servidor sirve los cambios al momento.
Copias de seguridad de un volumen
Un volumen con nombre vive dentro de la carpeta interna de Docker, así que no basta con copiar archivos a mano. Una forma sencilla de respaldarlo es lanzar un contenedor temporal que monte el volumen y una carpeta de tu equipo, y que comprima el contenido. Por ejemplo, puedes montar el volumen en /datos y una carpeta local en /copia, y ejecutar tar czf /copia/datos.tar.gz /datos dentro del contenedor. El resultado queda en tu carpeta y puedes guardarlo en otro disco.
Para restaurar, haces lo contrario: creas un volumen vacío, montas la copia y descomprimes dentro. Conviene parar antes la aplicación que usa el volumen, sobre todo si es una base de datos, para no copiar archivos a medio escribir.
Cómo saber qué volúmenes tienes
Con docker volume ls ves la lista y con docker volume inspect NOMBRE obtienes su ubicación y detalles, como la fecha de creación y el controlador que usa. Los volúmenes huérfanos, que ya no usa ningún contenedor, se acumulan con el tiempo; revisa antes de borrarlos, porque pueden contener datos de proyectos que pausaste.
Errores comunes con volúmenes
El error más frecuente es montar el volumen en una ruta distinta de la que la aplicación usa de verdad. El contenedor arranca sin quejas, pero los datos se guardan en otro sitio y desaparecen al borrar el contenedor. Antes de dar un volumen por bueno, conviene escribir un archivo de prueba, reiniciar el contenedor y comprobar que sigue ahí.
Otro problema habitual son los permisos: la aplicación dentro del contenedor corre con un usuario que no siempre puede escribir en la carpeta compartida. Si algo falla solo al guardar datos, casi siempre es eso. Y cuidado con los comandos de limpieza que borran volúmenes junto con los contenedores: son cómodos, pero conviene leerlos dos veces antes de ejecutarlos, porque una vez borrado un volumen no hay papelera de reciclaje.
Buenas prácticas
- Usa volúmenes con nombre para los datos de producción (bases de datos, subidas de usuarios).
- Usa bind mounts solo en desarrollo o para archivos de configuración.
- No escribas datos importantes dentro del contenedor sin montar un volumen.
- Incluye los volúmenes en tu estrategia de copias de seguridad: el volumen persiste, pero no se hace backup solo.
Comentarios
Publicar un comentario