Docker Volumenes
Docker: Volumenes
Un volumen de Docker es un sistema de almacenamiento que se crea y se gestiona por Docker. Los volúmenes están completamente gestionados por Docker y existen de manera independiente de los contenedores activos, lo que significa que los datos persisten incluso cuando no hay contenedores utilizando el volumen.
Propósito de los Volúmenes de Docker
El propósito de los volúmenes de Docker es ideal para situaciones en las que necesitas conservar tus datos a través de reinicios del contenedor o cuando necesitas compartir datos entre varios contenedores.
Volúmenes anónimos y Volúmenes nombrados
Volúmenes anónimos:
Es cuando no se especifica la ruta del host. Por lo que será docker quien decida donde guarda el volumen, normalmente esta en document root de docker en la carpeta volumes.
docker run -d --name db -p 3306:3306 -e “MYSQL_ROOT_PASSWORD=root”
-v var/lib/mysql mysql
// -v con la ruta dentro del contenedor
Volúmenes nombrados:
Los volúmenes nombrados son aquellos que se van a crear en la misma carpeta que los volúmenes anónimos pero podemos definir nosotros el nombre que va a tener. Para crear el volumen se hace de la siguiente manera:
// crear un volumen nombrado
docker volume create volume_name
// borrar un volumen nombrado
docker volumen rm nombreVolumen
// Asignar el volumen nombrado
docker run -d --name db -p 3306:3306 -e “MYSQL_ROOT_PASSWORD=root”
-v nombreVolumen:var/lib/mysql mysql
Manejo de Volúmenes
Listar volumenes
docker volume ls
Borrar volumen
Sin embargo, es importante asegurarse de que ningún contenedor esté usando el volumen antes de intentar eliminarlo, ya que Docker no permitirá eliminar un volumen en uso.
docker volume rm nombre-del-volumen
Borrar volúmenes anónimos y contenedor
ℹ️ Los volúmenes nombrados no son eliminados
docker rm -fv
Inspeccionar volúmenes
docker volume inspect mi-volumen
Comparación entre volúmenes, bind mounts y tmpfs mounts
Docker ofrece varias soluciones para la gestión de datos. Además de los volúmenes, Docker permite el uso de bind mounts y tmpfs mounts, cada uno con sus propias características y casos de uso.
Bind mounts
- Un bind mount es un mapeo de un directorio o archivo específico en el host a un contenedor. Esto permite que el contenedor acceda y modifique los archivos directamente, lo que puede ser útil para el desarrollo o para proporcionar configuración específica al contenedor.
- A diferencia de los volúmenes, los bind mounts dependen de la estructura del sistema de archivos del host, lo que puede afectar la portabilidad del contenedor.
Ejemplo de creación de un bind mount
docker run -d \
--name contenedor_bind_mount \
-v /ruta/en/host:/ruta/en/contenedor \
imagen
Tmpfs mounts:
Estos son menos conocidos pero útiles para almacenar información temporal que no necesitas persistir entre reinicios del contenedor:
- Se almacenan en la memoria RAM del host, lo que significa que son muy rápidos pero también que se borran cuando el contenedor se detiene.
- Son ideales para información sensible o para datos que cambian constantemente y no necesitan persistencia.
Se configura con la opción --tmpfs.
docker run -d \
--name container_name \
--tmpfs /ruta/en/contenedor \
imagen
| Característica | Bind Mount | Tmpfs Mount |
|---|---|---|
| Opción | -v o --mount con una ruta del host |
--tmpfs o --mount type=tmpfs |
| Persistencia | Persisten en el disco del host | Datos se pierden al detener el contenedor |
| Propósito | Compartir datos con el host | Almacenamiento temporal en RAM |
| Ubicación de datos | En el sistema de archivos del host | En memoria (RAM) |