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.
Deja una respuesta