La Guía Esencial de Comandos para la Gestión de Volúmenes de Docker

Domine la gestión de volúmenes de Docker con esta guía esencial. Aprenda a crear, listar, inspeccionar, eliminar y purgar volúmenes de datos persistentes utilizando los comandos `docker volume`. Descubra las mejores prácticas y ejemplos prácticos para garantizar la integridad de los datos y ciclos de vida de las aplicaciones sin problemas. Imprescindible para cualquier usuario de Docker que gestione aplicaciones con estado.

37 vistas

La Guía Esencial de Comandos de Gestión de Volúmenes de Docker

Los contenedores Docker son, por naturaleza, efímeros. Esto significa que cualquier dato escrito dentro de un contenedor se perderá una vez que el contenedor se detenga y se elimine. Para las aplicaciones que requieren almacenamiento de datos persistente —como bases de datos, archivos de configuración o cargas de usuario— esta fugacidad plantea un desafío significativo. La gestión de volúmenes de Docker proporciona una solución robusta a este problema, permitiéndole gestionar los datos persistentes independientemente del ciclo de vida del contenedor.

Comprender y utilizar eficazmente los comandos de volumen de Docker es crucial para cualquier desarrollador o administrador de sistemas que trabaje con Docker. Esta guía le mostrará los comandos esenciales de docker volume, demostrando cómo crear, listar, inspeccionar y gestionar sus datos persistentes, asegurando la integridad de los datos y el funcionamiento fluido de la aplicación.

¿Qué son los Volúmenes de Docker?

Los volúmenes de Docker son el mecanismo preferido para persistir los datos generados y utilizados por los contenedores Docker. Los volúmenes son creados, gestionados y controlados por Docker. Se almacenan fuera de la capa escribible del contenedor, normalmente en la máquina host en una ubicación gestionada por el demonio de Docker. Esta separación asegura que los datos permanezcan intactos incluso si el contenedor se elimina, actualiza o mueve a un host diferente.

Las características clave de los volúmenes de Docker incluyen:

  • Persistencia: Los datos almacenados en volúmenes sobreviven a los reinicios, eliminaciones y actualizaciones de contenedores.
  • Aislamiento: Los volúmenes están desacoplados del sistema de archivos del contenedor, simplificando la gestión de datos.
  • Portabilidad: Los volúmenes se pueden mover o copiar fácilmente entre entornos.
  • Rendimiento: Los volúmenes a menudo ofrecen un mejor rendimiento en comparación con los montajes de enlace (bind mounts), especialmente para operaciones intensivas de E/S.

Comandos Centrales de docker volume

El comando docker volume es la interfaz principal para gestionar volúmenes. Exploremos los subcomandos más importantes.

docker volume create

Este comando crea un nuevo volumen de Docker. Opcionalmente, puede especificar un nombre para el volumen. Si no se proporciona ningún nombre, Docker generará un nombre único.

Sintaxis:

docker volume create [OPTIONS] [VOLUME_NAME]

Ejemplo 1: Creación de un volumen con un nombre específico

Este comando crea un volumen llamado my-app-data.

docker volume create my-app-data

Ejemplo 2: Creación de un volumen anónimo (Docker genera un nombre)

docker volume create

Cuando ejecute esto, Docker mostrará el nombre generado aleatoriamente del nuevo volumen.

docker volume ls

Este comando lista todos los volúmenes de Docker en su sistema. Muestra el DRIVER (Controlador) y el NAME (Nombre) de cada volumen.

Sintaxis:

docker volume ls [OPTIONS]

Opciones:

  • -f, --filter filter: Filtra la salida basándose en condiciones (p. ej., dangling=true).
  • --format string: Imprime los volúmenes con formato utilizando una plantilla Go.
  • -q, --quiet: Solo muestra los nombres de los volúmenes.

Ejemplo 1: Listar todos los volúmenes

docker volume ls

Ejemplo 2: Listar solo los nombres de los volúmenes

docker volume ls -q

Ejemplo 3: Listar volúmenes huérfanos (volúmenes no asociados a ningún contenedor)

docker volume ls -f dangling=true

docker volume inspect

Este comando muestra información detallada sobre uno o más volúmenes. La salida está en formato JSON e incluye detalles como el punto de montaje del volumen en el host, el controlador y las etiquetas.

Sintaxis:

docker volume inspect [OPTIONS] VOLUME [VOLUME...]

Ejemplo: Inspeccionar un volumen específico

Suponiendo que tiene un volumen llamado my-app-data, puede inspeccionarlo así:

docker volume inspect my-app-data

La salida se verá similar a esta:

[
    {
        "CreatedAt": "2023-10-27T10:00:00Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-app-data/_data",
        "Name": "my-app-data",
        "Options": {}
    }
]

docker volume rm

Este comando elimina uno o más volúmenes. Importante: Un volumen no puede eliminarse si está siendo utilizado actualmente por un contenedor en ejecución. Debe detener y eliminar cualquier contenedor que use el volumen antes de poder borrarlo.

Sintaxis:

docker volume rm [OPTIONS] VOLUME [VOLUME...]

Opciones:

  • -f, --force: Fuerza la eliminación del volumen incluso si no está completamente disociado de los contenedores (úsese con precaución).

Ejemplo: Eliminación de un volumen

Primero, asegúrese de que ningún contenedor esté utilizando el volumen. Luego, ejecute:

docker volume rm my-app-data

Advertencia: Si intenta eliminar un volumen que está en uso, Docker devolverá un error.

docker volume prune

Este comando elimina todos los volúmenes locales no utilizados. Los volúmenes no utilizados son aquellos que no están actualmente adjuntos a ningún contenedor. Este es un comando potente para limpiar el espacio en disco.

Sintaxis:

docker volume prune [OPTIONS]

Opciones:

  • -f, --force: No solicite confirmación.

Ejemplo: Eliminación de todos los volúmenes no utilizados

docker volume prune

Docker le pedirá que confirme la operación. Si desea omitir la confirmación, use la bandera -f:

docker volume prune -f

Precaución: Este comando eliminará permanentemente todos los volúmenes no utilizados. Asegúrese de comprender qué volúmenes no se utilizan antes de ejecutarlo.

Uso de Volúmenes con Contenedores

Los volúmenes se adjuntan típicamente a los contenedores cuando el contenedor se crea o se ejecuta. Esto se hace utilizando las banderas -v o --mount con docker run.

Uso de la bandera -v

Esta es una forma abreviada de montar volúmenes.

Sintaxis:

docker run -v <volume_name>:<container_path> <image_name>

Ejemplo: Ejecución de un contenedor PostgreSQL con un volumen nombrado

docker run --name my-postgres -v pgdata:/var/lib/postgresql/data -d postgres

En este ejemplo:

  • --name my-postgres: Nombra el contenedor.
  • -v pgdata:/var/lib/postgresql/data: Monta un volumen llamado pgdata en el directorio de datos de PostgreSQL dentro del contenedor. Si pgdata no existe, Docker lo creará.
  • -d: Ejecuta el contenedor en modo desatendido (detached).
  • postgres: La imagen Docker a utilizar.

Uso de la bandera --mount

La bandera --mount ofrece una forma más explícita y detallada de configurar montajes, incluidos los volúmenes.

Sintaxis para volúmenes:

docker run --mount type=volume,source=<volume_name>,target=<container_path> <image_name>

Ejemplo: Ejecución de un contenedor Redis con un volumen nombrado usando --mount

docker run --name my-redis --mount type=volume,source=redisdata,target=/data -d redis

Aquí, type=volume especifica que estamos utilizando un volumen de Docker. source=redisdata es el nombre del volumen (que Docker creará si no existe), y target=/data es la ruta dentro del contenedor donde se montará el volumen.

Mejores Prácticas para la Gestión de Volúmenes de Docker

  • Utilice Volúmenes Nombrados: Prefiera los volúmenes nombrados (my-app-data) sobre los volúmenes anónimos (nombres generados por Docker) para mejorar la legibilidad y la gestión.
  • Organice los Volúmenes: Desarrolle una convención de nomenclatura para sus volúmenes que refleje su propósito o la aplicación que soportan.
  • Elimine Regularmente los Volúmenes No Utilizados: El espacio en disco puede acumularse rápidamente. Programe operaciones regulares de docker volume prune para limpiar volúmenes antiguos y no utilizados.
  • Inspeccione los Volúmenes: Utilice docker volume inspect para comprender dónde se almacenan sus datos en el host y para solucionar problemas de montaje.
  • Haga Copias de Seguridad de Datos Importantes: Los volúmenes almacenan datos persistentes, pero no son copias de seguridad intrínsecas. Implemente una estrategia de copia de seguridad separada para los datos críticos almacenados en volúmenes.
  • Considere los Controladores de Volumen: Para casos de uso más avanzados (p. ej., almacenar datos en almacenamiento de red), explore diferentes controladores de volumen más allá del controlador local predeterminado.

Conclusión

Los volúmenes de Docker son un componente fundamental para construir aplicaciones con estado (stateful) con Docker. Al dominar los comandos de docker volumecreate, ls, inspect, rm y prune— usted obtiene un control detallado sobre sus datos persistentes. Este control asegura que los datos de su aplicación estén seguros, accesibles y gestionados eficazmente durante todo su ciclo de vida, haciendo que sus implementaciones de Docker sean más robustas y fiables.