¿Cómo funcionan los volúmenes en Docker?
Los volúmenes en Docker son una forma eficiente y flexible de manejar datos que necesitan persistir más allá del ciclo de vida de un contenedor. Para entender este concepto, vamos a desglosarlo en partes simples y usar analogías cotidianas.
¿Cómo funcionan los volúmenes en Docker?
Un volumen en Docker es como una unidad de almacenamiento externa que conectas a tus contenedores. Imagina que tienes una laptop y necesitas guardar algunos documentos importantes en una USB para que no se pierdan si la laptop se daña. Aquí, la USB sería el volumen, y tu laptop sería el contenedor.
En términos técnicos:
- Los datos almacenados en volúmenes están separados del sistema de archivos del contenedor.
- Esto permite que los datos persistan incluso si el contenedor es eliminado.
- Los volúmenes pueden ser compartidos entre varios contenedores.
¿Por qué usar volúmenes?
Imagina que estás cocinando y usas una libreta para anotar recetas (los datos). Si cambias de cocina (contenedor) o remodelas tu cocina, no quieres que se pierdan tus recetas. Guardarlas en una libreta independiente (el volumen) asegura que puedes llevarlas contigo y usarlas donde sea.
Ventajas técnicas:
- Persistencia: Los datos sobreviven aunque el contenedor sea eliminado.
- Independencia del sistema de archivos del host: Docker maneja los volúmenes sin depender directamente del sistema operativo subyacente.
- Portabilidad y facilidad de uso: Puedes compartir datos fácilmente entre contenedores.
- Seguridad: Puedes configurar permisos para controlar quién puede acceder al volumen.
Tipos de almacenamiento de datos en Docker
Docker ofrece tres métodos principales para manejar datos:
- Volumes (Volúmenes):
- Administrados directamente por Docker.
- Almacenados en /var/lib/docker/volumes/ en el host.
- Los más recomendados para la mayoría de los casos.
- Bind Mounts (Montajes ligados):
- Conectas un directorio específico del sistema operativo del host al contenedor.
- Más flexibles, pero más propensos a errores porque dependen del sistema de archivos del host.
- tmpfs (almacenamiento temporal en memoria):
- Los datos solo se guardan en la RAM y se pierden cuando el contenedor se detiene.
Cómo trabajar con volúmenes
1. Crear un volumen
Docker te permite crear volúmenes explícitamente. Es como formatear una nueva USB.
docker volume create mi_volumen
Esto crea un volumen llamado mi_volumen.
2. Conectar un volumen a un contenedor
Cuando creas o ejecutas un contenedor, puedes asociarle un volumen.
docker run -d --name mi_contenedor -v mi_volumen:/datos nginx
Aquí:
- mi_volumen es el nombre del volumen que conectas.
- /datos es la carpeta dentro del contenedor donde el volumen estará disponible.
Es como decir: «Conecta esta USB (mi_volumen) al escritorio de la cocina (la carpeta /datos en el contenedor)».
3. Listar volúmenes
Puedes ver todos los volúmenes disponibles con:
docker volume ls
4. Inspeccionar un volumen
Para ver detalles de un volumen, como dónde está almacenado en el host:
docker volume inspect mi_volumen
5. Eliminar un volumen
Si ya no necesitas un volumen, puedes eliminarlo (cuidado, se perderán los datos).
docker volume rm mi_volumen
Ejemplo práctico
Crea un volumen llamado datos_app:
docker volume create datos_app
Ejecuta un contenedor de MySQL, conectando el volumen
docker run -d --name mi_mysql \ -e MYSQL_ROOT_PASSWORD=clave_secreta \ -v datos_app:/var/lib/mysql \ mysql:latest
La carpeta /datos_app guarda la base de datos en el host.
Si eliminas y vuelves a crear el contenedor, los datos seguirán intactos.
Elimina el contenedor y verifica que los datos persisten.
¿Cuándo usar volúmenes?
- Bases de datos: Guardar datos que no quieres perder.
- Logs: Mantener registros accesibles aunque los contenedores se reinicien.
- Archivos compartidos: Si varios contenedores necesitan acceso a los mismos datos