Docker Compose es una potente herramienta de orquestación diseñada para simplificar la gestión y el despliegue de aplicaciones multicontenedor mediante Docker. El archivo docker-compose.yml agiliza el despliegue definiendo aplicaciones complejas con múltiples servicios, redes y volúmenes en un solo archivo. Uno de los aspectos esenciales del trabajo con Docker Compose es la gestión de datos persistentes mediante volúmenes.

Este artículo explora la importancia de utilizar volúmenes en Docker Compose para gestionar datos persistentes y proporciona una guía práctica para utilizar volúmenes de forma eficaz.

¿Qué Son los Volúmenes Docker?

Los volúmenes Docker son un componente crucial del ecosistema que almacena y gestiona datos persistentes generados por contenedores efímeros. Permiten que los datos persistan incluso después de eliminar o actualizar un contenedor, de modo que los datos esenciales de la aplicación no se pierdan durante las operaciones rutinarias.

Los volúmenes están desacoplados del sistema de archivos del contenedor, por lo que puedes hacer fácilmente copias de seguridad de ellos, compartirlos entre varios contenedores y migrarlos entre hosts.

Una ventaja clave del uso de volúmenes en lugar de montajes vinculados (bind mounts), que son montajes de directorios desde el sistema host a un contenedor, es la portabilidad. Puedes trasladar volúmenes rápidamente entre diferentes hosts o contenedores, pero debes vincular los montajes vinculados a un directorio específico en el sistema host.

Esta portabilidad permite una gestión de datos más flexible y eficaz en las aplicaciones basadas en contenedores. Los volúmenes también son compatibles con varios controladores de almacenamiento, lo que te permite elegir la mejor solución de almacenamiento para tu caso de uso específico.

Tipos de Volúmenes Docker

Los volúmenes Docker son esenciales para gestionar datos en aplicaciones basadas en contenedores. Existen dos tipos distintos: volúmenes nombrados y volúmenes anónimos. Esta sección profundiza en las diferencias clave entre ambos tipos y demuestra cómo implementarlos para gestionar los datos en tus aplicaciones.

Los volúmenes nombrados y anónimos sirven para propósitos diferentes y ofrecen distintas capacidades de control y gestión. Aunque los volúmenes nombrados suelen ser preferibles para la mayoría de los casos de uso debido a sus identificadores legibles por humanos y a su facilidad de gestión, es esencial entender cómo funcionan ambos tipos para maximizar sus ventajas.

Volúmenes Nombrados

Los volúmenes nombrados tienen un nombre definido por el usuario, lo que facilita su identificación, gestión y uso compartido entre varios contenedores. Docker crea y gestiona volúmenes nombrados y almacena sus datos en una ubicación específica del sistema host. Esta ubicación suele estar dentro del directorio de instalación de Docker, bajo un ID único correspondiente al nombre del volumen.

Los volúmenes nombrados ofrecen mayor control y flexibilidad, ya que puedes referenciarlos y manipularlos fácilmente utilizando su identificador legible por humanos.

Para crear un volumen nombrados en Docker, ejecuta:

docker volume create my_named_volume

Volúmenes Anónimos

A diferencia de los volúmenes nombrados, los volúmenes anónimos no tienen un nombre definido por el usuario. En su lugar, Docker los crea automáticamente cuando creas un contenedor y asigna un ID único al volumen.

Por lo general, es más difícil gestionar y almacenar volúmenes debido a que carecen de un identificador legible por humanos. Como Docker los crea automáticamente, es habitual utilizar volúmenes anónimos para el almacenamiento temporal. También pueden aparecer si no especificas un volumen con nombre al crear un contenedor.

Para crear un contenedor con un volumen anónimo, ejecuta:

docker run -v /data nginx

Este comando monta un volumen anónimo en el directorio /data dentro del contenedor nginx. Puedes sustituir nginx por el nombre del contenedor en el que vas a montar el volumen.

Cómo Crear y Gestionar Volúmenes con Docker Compose

Docker Compose simplifica la creación y gestión de volúmenes permitiéndote definirlos dentro del archivo docker-compose.yml. Este archivo contiene la configuración de los servicios, redes y volúmenes de tu aplicación, lo que permite gestionar fácilmente los recursos de tu aplicación en un solo lugar.

1. Definir Volúmenes en Docker Compose

Para crear un volumen nombrado en el archivo docker-compose.yml, defínelo bajo la clave volumes. También puedes especificar el controlador de volumen y las opciones si es necesario.

2. Montar Volúmenes en Contenedores

Para montar un volumen en un contenedor, utiliza la clave volumes dentro de la definición service en el archivo docker-compose.yml. Especifica el nombre del volumen seguido de dos puntos y la ruta del contenedor donde quieres montar el volumen.

También puedes compartir volúmenes entre varios contenedores utilizando el mismo nombre de volumen.

Aquí tienes un ejemplo de creación de volúmenes nombrados llamados web_data y db_data en tu archivo docker-compose .yml:

version: '3.8'
services:
  web:
    image: nginx
    volumes:
      - web_data:/var/www/html
  web-test:
    image: nginx
    volumes:
      - web_data:/var/www/html # Web and web test share the web_data volume
  db:
    image: mysql
    volumes:
      - db_data:/var/lib/mysql
volumes:
  web_data:
  db_data:
    driver: local # Define the driver and options under the volume name
    driver_opts:
      type: none
      device: /data/db_data
      o: bind

Este ejemplo define dos volúmenes nombrados. A continuación, monta los volúmenes en sus respectivos contenedores bajo rutas específicas. A continuación, monta el volumen web_data en el directorio /var/www/html del contenedor web y el volumen db_data en el directorio /var/lib/mysql del contenedor db.

Los contenedores web y web-test comparten el volumen web_data, lo que les permite acceder y modificar el mismo volumen de datos.

Al definir y gestionar los volúmenes dentro del archivo docker-compose.yml, puedes crear, actualizar y eliminar volúmenes fácilmente, según sea necesario, sin tener que gestionarlos manualmente mediante comandos Docker. Este proceso simplificado te permite centrarte en desarrollar y desplegar tu aplicación mientras Docker Compose se encarga de la gestión de los recursos subyacentes.

Cómo Trabajar con Docker Compose y los Comandos de Volumen

Docker Compose proporciona varios comandos que te ayudan a gestionar eficazmente tu aplicación y sus recursos. Revisemos estos comandos y cómo se relacionan con los volúmenes con más detalle:

  • docker compose up crea e inicia tu aplicación, incluidos sus servicios, redes y volúmenes. Si defines un volumen nombrado en el archivo docker-compose.yml antes de que exista, este comando lo creará automáticamente.
  • docker compose down detiene y elimina los servicios y redes de tu aplicación. Por defecto, no elimina los volúmenes nombrados. Para eliminar volúmenes nombrados, utiliza la bandera --volumes o -v.
  • docker compose ps lista los contenedores y su estado actual, incluyendo la información relacionada con los volúmenes.
  • docker compose config valida y muestra la configuración efectiva generada a partir del archivo docker-compose.yml, incluidas las definiciones de volumen.

Listar Volúmenes

Para listar todos los volúmenes, utiliza ls:

docker volume ls

El resultado muestra todos los volúmenes nombrados, incluidos los creados por Docker Compose.

Inspeccionar Volúmenes

Para ver los detalles de un volumen concreto, utiliza inspect . Muestra información sobre el volumen, como su nombre, controlador, punto de montaje y opciones:

docker volume inspect db_data

Los detalles del volumen se dan en formato JSON. Por ejemplo, considerando el archivo docker-compose.yml proporcionado anteriormente, ésta es la salida devuelta:

[
    {
        "CreatedAt": "some-date-here",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/path/on/host/where/volume/is/mounted",
        "Name": "db_data",
        "Options": {
            "device": "/data/db_data",
            "o": "bind",
            "type": "none"
        },
        "Scope": "local",
        "Status": {
            "Mounts": [
                ...
            ]
        }
    }
]

Eliminar un Volumen Docker por Nombre

Para eliminar un volumen Docker, puedes utilizar docker volume rm seguido del nombre del volumen:

docker volume rm volume-name

Limpiar Volúmenes No Utilizados

Para eliminar volúmenes no utilizados, utiliza prune:

docker volume prune

Este comando ayuda a limpiar tu entorno de desarrollo y a recuperar espacio de almacenamiento. Elimina todos los volúmenes no utilizados que no estén asociados a contenedores, incluidos los que crea Docker Compose.

Aprovechando estos comandos y sus funciones relacionadas con el volumen, puedes gestionar eficazmente los recursos de tu aplicación, garantizando un rendimiento óptimo y un uso eficiente del espacio de almacenamiento.

Versiones de Docker Compose

Desde julio de 2023, Docker Compose V1 ha dejado de recibir actualizaciones. Tampoco está ya disponible en las nuevas versiones de Docker Desktop. Sin embargo, Docker Desktop sigue admitiendo un alias docker-compose para redirigir comandos a docker compose por comodidad y para mejorar la compatibilidad con herramientas y scripts de terceros.

Para cambiar cualquier código existente de la versión 1 a la 2 de Docker Compose, simplemente sustituye el guión por un espacio. Por ejemplo, docker-compose up se convierte en docker compose up.

Con la versión 2, puedes utilizar el comando &compose directamente en la interfaz de línea de comandos (CLI) de Docker, cambiar el contexto de Docker para crear un contenedor en un servicio en la nube y utilizar Amazon ECS y Microsoft ACI.

Resumen

Este artículo ha destacado la importancia de utilizar volúmenes con Docker Compose para gestionar datos persistentes. Los volúmenes son un componente crucial en el ecosistema Docker, ya que te permiten almacenar y gestionar los datos que generan los contenedores Docker. Con los volúmenes Docker, los datos importantes de la aplicación persisten incluso después de eliminar o actualizar un contenedor, ayudando a mantener la integridad y consistencia de tu aplicación.

Docker Compose ofrece un método simplificado para crear y gestionar volúmenes dentro del archivo docker-compose.yml. Este método simplifica tu proceso de desarrollo y garantiza un uso eficiente de los recursos.

El uso de volúmenes también hace que el desarrollo sea flexible y eficiente, ya que Docker Compose proporciona varios comandos relacionados con los volúmenes para ayudarte a supervisar los recursos de la aplicación con eficacia. Aprovechar estos comandos te permite crear, inspeccionar y limpiar volúmenes fácilmente.

Cuando alojas tu aplicación con Kinsta, dispones de una infraestructura rápida, segura y fiable, con tus proyectos desplegados en la Red de Nivel Premium de Google Cloud Platform y en máquinas C2. Elige entre los 37 centros de datos  y una CDN habilitada para HTTP/3 con 260+ PoPs.

Mantente seguro con la tecnología de contenedores aislados, dos potentes cortafuegos y la protección DDoS avanzada de Cloudflare. También puedes integrar aplicaciones o automatizar flujos de trabajo con la API de Kinsta y desplegarlas con Docker.

Kinsta proporciona recursos y contenidos de alta calidad para desarrolladores web, incluyendo tutoriales y guías en profundidad para varios lenguajes y herramientas como Docker Compose. Lee nuestro contenido específico sobre Docker en el blog de Kinsta para saber más sobre Docker.

Marcia Ramos Kinsta

Soy el Jefe del Equipo Editorial de Kinsta. Soy una entusiasta del código abierto y me encanta programar. Llevo más de 7 años escribiendo y editando textos técnicos para el sector tecnológico, y me encanta colaborar con la gente para crear contenidos claros y concisos y mejorar los flujos de trabajo.