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.
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.
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:
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.
volumes
en Docker Compose
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
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
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.
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:
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.
Para más información sobre volumes
en Docker Compose, consulta la documentación oficial de Docker Compose.
Jorge García
Fullstack developer