MINI TUTORIAL DOCKER – DÍA 4

Volúmenes y persistencia: cómo guardar datos dentro y fuera del contenedor

(porque si borras el contenedor… los datos se van con él)


1. Objetivo del día

Hoy aprenderás:

  • qué ocurre con los datos dentro de un contenedor
  • por qué se pierden si borras el contenedor
  • qué es un volumen
  • tipos de volúmenes:
    • anonymous volumes
    • named volumes
    • bind mounts
  • cómo montar volúmenes correctamente (-v)
  • cómo usar volúmenes con Nginx (ejemplo real)

Este es uno de los conceptos más importantes en Docker.


2. Concepto clave: el sistema de archivos de un contenedor NO es permanente

Cuando ejecutas:

docker run -it alpine sh

y dentro creas un archivo:

touch /hola.txt
ls /

Ese archivo existe solo dentro del contenedor.

Si borras el contenedor:

docker rm CONTAINER

👉 Todo se pierde.

Esto es bueno para aplicaciones efímeras,
pero es un problema para:

  • bases de datos
  • logs
  • contenido web
  • configuraciones
  • backups

Por eso necesitamos volúmenes.


3. ¿Qué es un volumen en Docker?

Un volumen es una zona de datos que Docker mantiene fuera del contenedor,
para que los datos no desaparezcan aunque borres o recrees el contenedor.

Docker soporta dos mecanismos principales:


3.1 Anonymous volumes

Los crea Docker automáticamente cuando una imagen necesita persistencia.

Ejemplo:

docker run -v /var/lib/mysql mysql

Esto crea un volumen anónimo, sin nombre, difícil de identificar.

No recomendado para principiantes.


3.2 Named volumes (RECOMENDADO)

Los creas tú, les das un nombre, y Docker los gestiona.

Ejemplo:

docker volume create datos_nginx

Listar volúmenes:

docker volume ls

Usarlo en un contenedor:

docker run -d -p 8080:80 \
  --name nginx-vol \
  -v datos_nginx:/usr/share/nginx/html \
  nginx

Todo lo que escribas en /usr/share/nginx/html se guarda en datos_nginx.


3.3 Bind mounts (carpetas del host → contenedor)

(Lo más útil para desarrollo y para pruebas)

Son rutas reales de tu máquina host montadas dentro del contenedor.

Ejemplo:

docker run -d -p 8080:80 \
  --name nginx-local \
  -v $(pwd)/miweb:/usr/share/nginx/html \
  nginx

Esto significa:

  • tu carpeta local miweb/
  • corresponde directamente con
    /usr/share/nginx/html dentro de nginx

Todo lo que edites localmente → se refleja al instante en el contenedor.

Muy útil para pruebas de desarrollo, demos, HTML, etc.


4. Ejemplo práctico: servir tu propia web con Nginx + bind mount

4.1 Crea carpeta con un HTML

mkdir miweb
echo "<h1>Hola Docker</h1>" > miweb/index.html

4.2 Ejecuta Nginx montando esa carpeta

docker run -d --name nginx-web \
  -p 8080:80 \
  -v $(pwd)/miweb:/usr/share/nginx/html \
  nginx

4.3 Abrir navegador

👉 http://localhost:8080

Deberías ver:

Hola Docker

4.4 Modifica el archivo

echo "<h1>Hola Docker con volúmenes</h1>" > miweb/index.html

Recarga el navegador.

👉 NO has tenido que reiniciar el contenedor.

Esto demuestra por qué los volúmenes son tan potentes.


5. Ver dónde Docker guarda los volúmenes

docker volume inspect datos_nginx

Docker los almacena en:

/var/lib/docker/volumes/...

⚠️ Nunca edites los archivos dentro de esa carpeta manualmente (solo para inspeccionar).


6. Borrar un volumen (si ya no lo necesitas)

docker volume rm datos_nginx

Docker no borra volúmenes automáticamente al borrar un contenedor,
para evitar pérdida accidental de datos.


7. Práctica guiada del Día 4 (30–40 min)

✔ 1) Crea un volumen

docker volume create datos_nginx
docker volume ls

✔ 2) Lanza Nginx usando ese volumen

docker run -d --name nginx-vol \
  -p 8080:80 \
  -v datos_nginx:/usr/share/nginx/html \
  nginx

✔ 3) Identifica dónde vive el volumen

docker volume inspect datos_nginx

✔ 4) Usa bind mounts

mkdir miweb
echo "<h1>Hola bind mount</h1>" > miweb/index.html
docker run -d --name nginx-local \
  -p 8081:80 \
  -v $(pwd)/miweb:/usr/share/nginx/html \
  nginx

Ir a:

  • http://localhost:8081

Modificar el HTML → refrescar → ver cambios inmediatos.

✔ 5) Limpiar

docker stop nginx-vol nginx-local
docker rm nginx-vol nginx-local
docker volume rm datos_nginx

8. Checklist del Día 4

  • Entiendo por qué los datos dentro del contenedor se pierden
  • Sé qué es un named volume
  • Sé qué es un bind mount
  • He levantado Nginx con volumen persistente
  • He servido contenido desde una carpeta local
  • Sé inspeccionar y borrar volúmenes

Si esto se cumple → Día 4 completado


5️⃣ Día 5 – Redes Docker y comunicación entre contenedores
(bridge, redes personalizadas, comunicación entre contenedores).

[Índice Minti Tutorial Docker 7 días]

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies