Volver a la página principal
martes 5 noviembre 2024
60

Cómo usar volumes en Docker Compose

La opción volumes en Docker Compose permite montar volúmenes en contenedores Docker para almacenar datos de manera persistente. Esto es útil cuando deseas que la información generada o usada por los contenedores se mantenga incluso después de detener o eliminar los contenedores. Los volúmenes también facilitan compartir datos entre el contenedor y el sistema de archivos del host o entre varios contenedores.

Uso de volumes en Docker Compose

En un archivo docker-compose.yml, puedes definir volúmenes a nivel de servicio (dentro de un servicio específico) o de manera global para compartirlos entre múltiples servicios.

Estructura básica de volumes en docker-compose.yml

version: '3'
services:
  web:
    image: nginx
    volumes:
      - ./html:/usr/share/nginx/html  # Montaje de un directorio local
      - data_volume:/data              # Volumen nombrado (almacenamiento persistente)

volumes:
  data_volume:

Tipos de volúmenes en Docker Compose

1. Volúmenes nombrados: Son volúmenes gestionados por Docker y definidos en la sección volumes fuera de los servicios. Se almacenan en el host de Docker, en una ubicación específica, y permiten el almacenamiento persistente.

2. Volúmenes anónimos: Son volúmenes que no tienen un nombre explícito y solo se declaran en el servicio. Docker los crea de manera temporal y no se pueden compartir entre servicios.

3. Montajes de host: Permiten montar un directorio o archivo específico del host directamente en el contenedor.

Ejemplos de uso de volumes en Docker Compose

1. Montar un directorio local en el contenedor

Este tipo de volumen enlaza un directorio del host a una ubicación en el contenedor. Es útil para desarrollo, ya que permite editar archivos en el host y reflejar los cambios en el contenedor inmediatamente.

version: '3'
services:
  web:
    image: nginx
    volumes:
      - ./html:/usr/share/nginx/html  # Monta el directorio ./html del host en el contenedor

2. Crear y utilizar un volumen nombrado

Define un volumen nombrado para almacenar datos de forma persistente en Docker. Este volumen se puede compartir entre contenedores o mantener al reiniciar los contenedores.

version: '3'
services:
  app:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db_data:/var/lib/mysql  # Volumen para los datos de MySQL

volumes:
  db_data:  # Define el volumen nombrado

3. Compartir un volumen entre múltiples servicios

Un volumen nombrado también permite que varios contenedores accedan a los mismos datos.

version: '3'
services:
  app:
    image: app_image
    volumes:
      - shared_data:/app/data
  worker:
    image: worker_image
    volumes:
      - shared_data:/app/data

volumes:
  shared_data:

En este caso, los servicios app y worker pueden acceder al volumen shared_data, permitiéndoles compartir información en tiempo real.

4. Configurar un volumen con opciones adicionales

Puedes establecer opciones avanzadas como permisos de solo lectura:

version: '3'
services:
  app:
    image: app_image
    volumes:
      - data_volume:/app/data:ro  # Montaje en modo solo lectura (read-only)

volumes:
  data_volume:

Comandos útiles para trabajar con volúmenes en Docker Compose

1. Crear volúmenes con Docker Compose: Al iniciar los servicios con docker-compose up, Docker Compose crea automáticamente los volúmenes definidos.

2. Eliminar volúmenes: Usa docker-compose down --volumes para eliminar todos los volúmenes asociados a los servicios en el archivo docker-compose.yml.

docker-compose down --volumes

3. Listar volúmenes: Ejecuta docker volume ls para ver todos los volúmenes gestionados por Docker en el sistema.

Consideraciones de uso

  • Persistencia de datos: Los volúmenes nombrados son ideales para datos que deben persistir, mientras que los montajes de host son útiles para el desarrollo y edición de archivos en tiempo real.
  • Permisos: Asegúrate de que el usuario del contenedor tiene permisos de lectura/escritura en el volumen.
  • Limpieza: Los volúmenes persisten más allá del ciclo de vida del contenedor, por lo que es importante gestionarlos adecuadamente para evitar acumulación de datos no deseados.

Referencia oficial

Para más información sobre volumes en Docker Compose, consulta la documentación oficial de Docker Compose.

Etiquetas:
docker
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer