8.1 Introducción a los discos virtuales
Montar volúmenes (Volumes) es una de las funcionalidades más útiles de Docker. Con su ayuda, los contenedores pueden trabajar fácilmente con los datos de la máquina host. Esta función hace que la gestión de datos sea flexible y cómoda: puedes guardar información durante mucho tiempo, compartirla entre contenedores y sin problemas hacer copias de seguridad o restaurar datos si algo sale mal.
Volúmenes (Volumes) en Docker son una forma de guardar datos de manera que sean independientes de los contenedores. Incluso si se elimina un contenedor, la información almacenada en los volúmenes permanece segura. Los volúmenes se pueden conectar (montar) a los contenedores, lo que permite almacenar los datos por separado y reutilizarlos, sin importar cuántas veces crees o elimines contenedores.
Tipos principales de volúmenes
- Volúmenes anónimos (Anonymous Volumes)
- Son creados automáticamente por Docker si para el contenedor no se especifica explícitamente un volumen.
- Se utilizan para almacenamiento temporal de datos.
- Volúmenes nombrados (Named Volumes)
- Son creados y gestionados por Docker.
- Pueden ser conectados a varios contenedores y se conservan incluso después de eliminar o detener los mismos.
- Volúmenes con enlace (Bind Mounts)
- Conectan un directorio de la máquina host con un directorio en el contenedor.
- Son ideales para acceder a los datos del sistema host y son muy prácticos durante el desarrollo.
Sintaxis principal del comando docker run
para montar volúmenes
-v <host_path>:<container_path>
Sintaxis completa:
docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]
Parámetros principales para montar volúmenes
1. Parámetro -v
o --volume
Se utiliza para crear un volumen nombrado o un volumen con enlace.
Ejemplo:
docker run -d -v /host/data:/container/data nginx
2. Parámetro --mount
Proporciona una forma más flexible y detallada de montar volúmenes, admitiendo parámetros adicionales.
Ejemplo:
docker run -d --mount type=bind,source=/host/data,target=/container/data nginx
8.2 Creación y uso de volúmenes
1. Volúmenes nombrados
Los volúmenes nombrados son creados y gestionados por Docker. Están diseñados para almacenar datos de forma persistente, que deben mantenerse entre reinicios o eliminaciones de contenedores.
Creación de un volumen nombrado:
docker volume create my_volume
Ejecutar un contenedor con montaje de volumen:
En este ejemplo, el volumen my_volume
se monta en el directorio /data
dentro del contenedor my_container
. Todos los datos escritos en /data
se guardarán en el volumen y permanecerán disponibles incluso después de eliminar el contenedor.
docker run -d -v my_volume:/data --name my_container nginx
2. Volúmenes anónimos
Los volúmenes anónimos son creados automáticamente por Docker y están vinculados a un contenedor específico. Son útiles para datos temporales que no necesitan conservarse después de eliminar el contenedor.
Ejecutar un contenedor con un volumen anónimo:
En este ejemplo, Docker creará automáticamente un volumen anónimo y lo montará en el directorio /data
dentro del contenedor.
docker run -d -v /data --name my_container nginx
3. Directorios vinculados
Los directorios vinculados permiten montar los directorios del sistema host en los contenedores. Esto es útil para compartir datos entre los contenedores y el sistema host. Este enfoque también es común durante el desarrollo, cuando el código fuente se almacena en el sistema host.
Ejecutar un contenedor con un directorio vinculado:
En este ejemplo, el directorio /host/data
en la máquina host se monta en el directorio /container/data
dentro del contenedor my_container
.
docker run -d -v /host/data:/container/data --name my_container nginx
8.3 Ejemplos de uso de volúmenes
1. Guardar datos de bases de datos
Usar volúmenes para bases de datos ayuda a guardar la información incluso cuando se reinicia o actualiza el contenedor. Esto es especialmente importante para un funcionamiento confiable en entornos de producción.
Ejemplo:
En este ejemplo, los datos de PostgreSQL se guardan en el volumen db_data
, lo que garantiza su conservación durante el reinicio o eliminación del contenedor.
docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres
2. Uso compartido de datos entre contenedores
A veces es necesario compartir datos entre varios contenedores. Los volúmenes lo hacen fácil de realizar.
Ejemplo
Crearemos un volumen y lanzaremos dos contenedores que usarán este volumen. Ambos contenedores tendrán acceso a los datos en el volumen shared_data
, lo que les permite compartir información.
docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx
3. Desarrollo y pruebas
En el desarrollo de aplicaciones, es útil usar directorios enlazados para compartir código fuente entre el contenedor y la máquina host. Esto permite que los desarrolladores editen el código en el host y que el contenedor trabaje inmediatamente con las actualizaciones.
Ejemplo
En este ejemplo, el directorio /path/to/source
en la máquina host se monta en el directorio /app
dentro del contenedor dev_container
. De esta forma, el contenedor puede usar el código fuente actualizado directamente desde el sistema host.
docker run -d -v /path/to/source:/app --name dev_container node
8.4 Gestión de volúmenes
Docker ofrece comandos súper prácticos para gestionar volúmenes, lo que permite crearlos, eliminarlos y ver info sobre ellos sin complicaciones.
1. Ver todos los volúmenes
Este comando muestra una lista de todos los volúmenes disponibles en la máquina host.
docker volume ls
2. Ver información sobre un volumen
Este comando te da detalles del volumen my_volume
: su ubicación en el sistema de archivos del host y también info sobre los containers que están usando este volumen.
docker volume inspect my_volume
3. Eliminar un volumen
Este comando elimina el volumen my_volume
. Antes de eliminarlo, es importante asegurarse de que ningún container lo esté usando, porque si no, el comando no se ejecutará.
docker volume rm my_volume
8.5 Copia de seguridad de volúmenes
Para mantener la seguridad de los datos, es importante poder crear copias de seguridad de los volúmenes y restaurarlas cuando sea necesario.
1. Copia de seguridad de un volumen
En este ejemplo, el contenido del volumen my_volume
se archiva en el archivo my_volume_backup.tar.gz
, que se guarda en el directorio /backup
en la máquina host.
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume
2. Restauración de un volumen
Este ejemplo restaura el contenido del volumen my_volume
desde una copia de seguridad que se encuentra en el archivo my_volume_backup.tar.gz
.
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
GO TO FULL VERSION