Introducción
En este apartado exploraremos el uso de los volúmenes, que son los mecanismos de Docker para gestionar el almacenamiento persistente de datos. Conocerás las propiedades fundamentales de estos almacenes, comprendiendo las diferencias entre volúmenes internos y externos, así como los escenarios ideales para implementar cada uno.
Gestión de Volúmenes de Datos
El uso de volúmenes de datos es la operación estándar para garantizar la persistencia de la información en Docker. En esta sección, pondremos en práctica las operaciones habituales para administrar estos volúmenes.
Objetivo
Tu meta es crear un volumen de datos llamado my-vol utilizando los comandos de docker y añadir un archivo denominado test.txt dentro de dicho volumen.
Ejemplo de Resultado
A continuación, se muestra un ejemplo de lo que deberías lograr al finalizar este desafío:
- Crear un volumen de datos llamado
my-vol.
labex:~/ $ docker volume ls
DRIVER VOLUME NAME
local jenkins-data
local minikube
local my-vol
- Obtener el punto de montaje (
Mountpoint) consultando los detalles del volumen.
[
{
"CreatedAt": "2024-01-20T17:37:33+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
- Acceder al
Mountpointy crear el archivotest.txt.
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## pwd
/var/lib/docker/volumes/my-vol/_data
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## ls
test.txt
Requisitos
Para completar este desafío, necesitarás:
- Saber cómo crear un volumen de datos con el comando
docker. - Crear un archivo utilizando el usuario
root. - Cambiar al usuario
rootmediantesudo suy configurar la contraseña del usuariorootconsudo passwd root.
Creación de Contenedores con Volúmenes de Datos
En esta sección, crearemos contenedores vinculados a volúmenes de datos de Docker y realizaremos copias de archivos hacia ellos.
Objetivo
Debes crear un volumen de Docker llamado nginx-vol, iniciar un contenedor llamado nginx montando dicho volumen, y finalmente copiar el archivo /home/labex/project/index.html al interior del contenedor nginx.
Ejemplo de Resultado
Este es el resultado esperado al concluir esta etapa:
- Crear un volumen de datos llamado
nginx-vol.
labex:~/ $ docker volume ls
DRIVER VOLUME NAME
local jenkins-data
local minikube
local my-vol
local nginx-vol
- Crear un contenedor llamado
nginxbasado en la imagen oficial de nginx, montando su directorio/usr/share/nginx/htmlen el volumennginx-vol.
labex:~/ $ docker ps | grep nginx
c39296aaf39e nginx "/docker-entrypoint.…" 35 seconds ago Up 31 seconds 80/tcp nginx
- Verificar el contenido del archivo
/home/labex/project/index.html.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
- Confirmar que el archivo se ha copiado correctamente en el contenedor
nginx.
labex:/tmp/ $ docker exec nginx cat /usr/share/nginx/html/index.html
hello world
Requisitos
Para completar este desafío, necesitarás:
- Saber cómo crear un volumen de datos con el comando
docker. - Conocer el procedimiento para iniciar un contenedor.
- Saber cómo copiar archivos locales hacia el interior de los contenedores.
Creación de Contenedores con Rutas del Host (Bind Mounts)
En muchas situaciones, en lugar de usar volúmenes gestionados por Docker, es preferible utilizar directamente un directorio del sistema de archivos local para la persistencia. En esta sección, utilizaremos una ruta del host para crear contenedores.
Objetivo
Tu meta es crear un contenedor que utilice una "Ruta del Host" (Host Path), copiar el archivo /home/labex/project/nginx.txt dentro del contenedor y verificar que los archivos en el contenedor coincidan con los de la ruta del host.
Ejemplo de Resultado
Ejemplo de lo que debes lograr:
- Crear un directorio
nginxdentro de/tmp.
labex:/tmp/ $ ls | grep nginx
nginx
- Iniciar el contenedor
nginx-hostbasado en la imagennginx, montando el directorio local/tmp/nginxen el directorio/usr/share/nginx/htmldel contenedor.
labex:/tmp/ $ docker ps | grep nginx-host
6fc2d40e12df nginx "/docker-entrypoint.…" 44 seconds ago Up 43 seconds 80/tcp nginx-host
- Comprobar los detalles específicos del montaje con el comando
docker inspect.
"Mounts": [
{
"Type": "bind",
"Source": "/tmp/nginx",
"Destination": "/usr/share/nginx/html",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
- Verificar el contenido del archivo local
/home/labex/project/nginx.txt.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
- Copiar el archivo al contenedor y verificar su lectura desde el mismo.
labex:nginx/ $ docker exec nginx-host cat /usr/share/nginx/html/nginx.txt
hello nginx
- Comprobar el directorio
/tmp/nginxen la máquina local para confirmar la presencia del archivonginx.txt.
labex:nginx/ $ pwd
/tmp/nginx
labex:nginx/ $ cat nginx.txt
hello nginx
Requisitos
Para completar este desafío, necesitarás:
- Identificar la ruta del host (
Host Path) que deseas utilizar. - Saber ejecutar comandos dentro del contenedor para verificar el acceso a archivos o directorios.
- Conocer cómo iniciar un contenedor vinculando una ruta del host.
- Estar familiarizado con comandos básicos de Linux como
cd,mkdir,touch, etc.
Compartir Datos entre Contenedores
En entornos de contenedores, a veces es necesario compartir información de un contenedor a otro. Existen diversas técnicas para lograrlo, y en este desafío exploraremos cómo realizar este intercambio de datos.
Objetivo
Tu objetivo es implementar el uso compartido de datos entre dos contenedores. Específicamente, usarás una ruta del host para iniciar el contenedor A, luego iniciarás un contenedor B montando los volúmenes de A, permitiendo así que ambos compartan la misma información.
Ejemplo de Resultado
Ejemplo de los pasos a seguir:
- Crear un directorio
/tmp/shareen el host local.
labex:/tmp/ $ ls -ld /tmp/share
drwxr-xr-x 2 labex labex 4096 Jan 20 18:20 /tmp/share
- Crear un contenedor llamado
nginx-share(imagennginx) y montar el directorio local/tmp/shareen/usr/share/nginx/html.
labex:/tmp/ $ docker ps | grep nginx-share
216d02d94f39 nginx "/docker-entrypoint.…" 55 seconds ago Up 55 seconds 80/tcp nginx-share
- Crear un contenedor llamado
busybox-share(imagenbusybox) que monte los volúmenes desde el contenedornginx-share.
labex:/tmp/ $ docker ps | grep busy
30bf04aee681 busybox "sh" 43 seconds ago Up 42 seconds busybox-share
- Verificar el contenido del archivo local
/home/labex/project/share.txt.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
- Confirmar que el archivo es accesible desde el contenedor
nginx-share.
labex:/tmp/ $ docker exec nginx-share cat /usr/share/nginx/html/share.txt
hello share
- Acceder al contenedor
busybox-sharepara verificar que el archivoshare.txttambién está disponible allí.
labex:/tmp/ $ docker exec busybox-share cat /usr/share/nginx/html/share.txt
hello share
Requisitos
Para completar este desafío, necesitarás:
- Estar familiarizado con las operaciones básicas y conceptos de los contenedores Docker.
- Utilizar la línea de comandos de Docker para crear, ejecutar y detener contenedores.
- Comprender el concepto y uso de los volúmenes de datos.
- Entender cómo montar volúmenes de un contenedor en otro.
- Manejar comandos básicos de Linux como
cd,mkdir,touch, etc.
Resumen
¡Enhorabuena por completar este desafío! Si ya te sientes cómodo utilizando volúmenes de almacenamiento en contenedores, estás listo para avanzar al siguiente nivel.



