Trabajo con Volúmenes de Docker

DockerBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá a gestionar datos en contenedores de Docker utilizando volúmenes. Los volúmenes de Docker son el mecanismo preferido para persistir los datos generados y utilizados por los contenedores. Este laboratorio le guiará a través de varios aspectos de los volúmenes de Docker, incluyendo su creación, administración, intercambio de datos, respaldo y restauración. Al finalizar esta práctica, tendrá una comprensión sólida sobre cómo gestionar datos de manera efectiva en entornos Docker.

Este es un Laboratorio Guiado, que proporciona instrucciones paso a paso para ayudarle a aprender y practicar. Siga las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 97%. Ha recibido una tasa de valoraciones positivas del 99% por parte de los alumnos.

Comprensión de las Opciones de Almacenamiento en Docker

Antes de profundizar en los volúmenes de Docker, es importante entender las diferentes opciones de almacenamiento disponibles. Docker ofrece tres opciones principales para almacenar datos:

  1. Volúmenes (Volumes): El mecanismo preferido para persistir datos en Docker.
  2. Montajes de enlace (Bind mounts): Conectan una ruta específica de la máquina host a un contenedor.
  3. Montajes tmpfs (tmpfs mounts): Almacenan datos temporalmente en la memoria del sistema host.

En este laboratorio, nos centraremos principalmente en los volúmenes, ya que son la opción más flexible y recomendada para gestionar datos en Docker.

Comencemos listando los volúmenes actuales en su sistema:

docker volume ls

Verá una salida similar a esta:

DRIVER    VOLUME NAME
local     jenkins-data

Este comando enumera todos los volúmenes de Docker en su sistema. La salida muestra el controlador del volumen (normalmente "local") y el nombre del volumen. Es posible que vea algunos volúmenes existentes, o la lista podría estar vacía si aún no ha creado ninguno.

No se preocupe si ve nombres de volúmenes diferentes o si no aparece ninguno. Esto es normal y depende de lo que haya hecho previamente con Docker en su sistema.

Creación y Gestión de Volúmenes con Nombre

Ahora, vamos a crear un nuevo volumen con nombre. Un volumen con nombre es aquel que se crea explícitamente y al que se le asigna un nombre específico. Esto facilita su referencia y gestión posterior.

Ejecute este comando para crear un nuevo volumen:

docker volume create my_data

Este comando crea un nuevo volumen llamado my_data. Docker se encargará de todos los detalles sobre dónde y cómo se almacena este volumen en su sistema host.

Verifiquemos que el volumen se haya creado:

docker volume ls

Ahora debería ver my_data en la lista de volúmenes, junto con cualquier otro volumen que estuviera allí antes.

Para obtener información más detallada sobre el volumen, podemos usar el comando inspect:

docker volume inspect my_data

Esto devolverá algo como:

[
  {
    "CreatedAt": "2024-08-22T14:31:09+08:00",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/my_data/_data",
    "Name": "my_data",
    "Options": {},
    "Scope": "local"
  }
]

Esta salida nos indica varias cosas sobre nuestro volumen:

  • Cuándo fue creado.
  • El controlador (driver) que está utilizando (local en este caso).
  • El punto de montaje (mountpoint), que es donde se almacenan realmente los datos en su sistema host.
  • El nombre que le asignamos.

No se preocupe si no entiende todos estos detalles en este momento. Las partes más importantes para nosotros son el Nombre (Name) y el Punto de montaje (Mountpoint).

Uso de Volúmenes con Contenedores

Ahora que tenemos un volumen, vamos a usarlo con un contenedor. Iniciaremos un nuevo contenedor y le montaremos nuestro volumen.

Ejecute este comando:

docker run -d --name my_container -v my_data:/app/data ubuntu:latest sleep infinity

Desglosemos este comando:

  • docker run: Indica a Docker que ejecute un nuevo contenedor.
  • -d: Ejecuta el contenedor en modo desatendido (en segundo plano).
  • --name my_container: Asigna un nombre a nuestro contenedor para que sea más fácil referenciarlo después.
  • -v my_data:/app/data: Monta nuestro volumen my_data en el directorio /app/data dentro del contenedor.
  • ubuntu:latest: Es la imagen que estamos usando para nuestro contenedor.
  • sleep infinity: Es el comando que ejecutará el contenedor. Simplemente mantiene el contenedor funcionando indefinidamente.

Ahora nuestro contenedor está en ejecución con el volumen montado. Vamos a crear algunos datos dentro del volumen:

docker exec my_container sh -c "echo 'Hello from Docker volume' > /app/data/test.txt"

Este comando realiza lo siguiente:

  • docker exec: Nos permite ejecutar un comando en un contenedor que ya está en marcha.
  • my_container: Es el nombre de nuestro contenedor.
  • sh -c "...": Ejecuta un comando de shell dentro del contenedor.
  • El comando real crea un archivo llamado test.txt en nuestro volumen con el contenido "Hello from Docker volume".

Para verificar que los datos se escribieron correctamente, podemos leer el archivo:

docker exec my_container cat /app/data/test.txt

Debería ver el mensaje "Hello from Docker volume" impreso en la consola.

Intercambio de Datos entre Contenedores

Uno de los grandes beneficios de los volúmenes de Docker es la capacidad de compartir datos entre contenedores. Vamos a crear otro contenedor que utilice el mismo volumen:

docker run -d --name another_container -v my_data:/app/shared_data ubuntu:latest sleep infinity

Este comando es muy similar al que usamos anteriormente, pero le damos al contenedor un nombre diferente y montamos el volumen en una ruta distinta dentro del contenedor.

Ahora, verifiquemos que este nuevo contenedor puede acceder a los datos que creamos antes:

docker exec another_container cat /app/shared_data/test.txt

Debería ver el mismo mensaje "Hello from Docker volume" que escribimos anteriormente. Esto demuestra que ambos contenedores están accediendo a los mismos datos.

Agreguemos más datos desde este nuevo contenedor:

docker exec another_container sh -c "echo 'Data from another container' >> /app/shared_data/test.txt"

Este comando añade una nueva línea a nuestro archivo test.txt.

Ahora, si comprobamos el contenido del archivo desde cualquiera de los contenedores, deberíamos ver ambas líneas:

docker exec my_container cat /app/data/test.txt

Debería ver tanto "Hello from Docker volume" como "Data from another container" en la salida.

Esto demuestra cómo se pueden utilizar los volúmenes de Docker para compartir información entre contenedores, lo cual es increíblemente útil para muchas aplicaciones.

Respaldo y Restauración de Volúmenes

Realizar copias de seguridad y restaurar volúmenes de Docker es crucial para la preservación de los datos. Veamos cómo realizar este proceso:

Primero, necesitamos detener y eliminar los contenedores que estaban usando el volumen. Esto se debe a que no se puede eliminar un volumen mientras está en uso:

docker stop my_container another_container
docker rm my_container another_container

Ahora, vamos a crear un respaldo de nuestro volumen:

docker run --rm -v my_data:/source:ro -v $(pwd):/backup ubuntu tar cvf /backup/my_data_backup.tar -C /source .

Este comando puede parecer complejo, así que vamos a explicarlo:

  • docker run --rm: Ejecuta un contenedor temporal y lo elimina automáticamente al terminar.
  • -v my_data:/source:ro: Monta nuestro volumen como solo lectura (ro) en el contenedor.
  • -v $(pwd):/backup: Monta el directorio actual del host como /backup en el contenedor.
  • ubuntu: Utiliza la imagen de Ubuntu.
  • tar cvf /backup/my_data_backup.tar -C /source .: Crea un archivo comprimido (tar) con los datos del volumen.

Ahora, eliminemos nuestro volumen original:

docker volume rm my_data

Para restaurar los datos, crearemos un nuevo volumen y extraeremos el respaldo en él:

docker volume create my_restored_data
docker run --rm -v my_restored_data:/dest -v $(pwd):/backup ubuntu bash -c "tar xvf /backup/my_data_backup.tar -C /dest"

Esto crea un nuevo volumen y extrae nuestra copia de seguridad en su interior.

Verifiquemos que los datos han sido restaurados:

docker run --rm -v my_restored_data:/app/data ubuntu cat /app/data/test.txt

Debería ver el contenido del archivo que creamos anteriormente.

Resumen

En este laboratorio, ha aprendido a trabajar con volúmenes de Docker. Ha creado y administrado volúmenes con nombre, ha utilizado volúmenes con contenedores, ha compartido datos entre ellos y ha realizado operaciones de respaldo y restauración. Estas habilidades son esenciales para una gestión de datos eficaz en entornos Docker.

Puntos clave:

  • Los volúmenes de Docker proporcionan una forma flexible y eficiente de gestionar datos persistentes en contenedores.
  • Los volúmenes se pueden crear, inspeccionar y eliminar fácilmente mediante los comandos de la CLI de Docker.
  • Los datos en los volúmenes pueden compartirse entre múltiples contenedores.
  • El respaldo y la restauración de volúmenes son fundamentales para la preservación de datos y pueden realizarse utilizando comandos estándar de Linux.

A medida que continúe trabajando con Docker, recuerde considerar la persistencia y la gestión de datos como un aspecto crucial de sus aplicaciones contenedorizadas. Planifique siempre el respaldo y la recuperación de datos, especialmente en entornos de producción.