CodeGym /Cursos /Docker SELF /Montaje de volúmenes

Montaje de volúmenes

Docker SELF
Nivel 12 , Lección 2
Disponible

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

  1. 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.
  2. 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.
  3. 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:

Terminal

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:

Terminal

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:

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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á.

Terminal

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.

Terminal

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.

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION