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)