Categorías

Actualizar Jellyfin de 10.11 a 12 en Docker con copia y vuelta atrás

Actualizar Jellyfin de la 10.11.11 a la 12.0 en Docker exige copiar antes el volumen /config, porque la 12.0 reescribe la base de datos. En este lab haces la copia con un contenedor auxiliar, migras, lees la versión 12.0.0 desde la API y compruebas que volver atrás solo funciona restaurando esa copia.

  • 9 pasos

Cómo actualizar Gitea 1.27 a 28 con Docker sin perder los webhooks

Para actualizar Gitea 1.27 a 28 con Docker, para el contenedor, copia el volumen /data, borra de app.ini las claves de egress heredadas y cambia GITEA_TAG a 28.0.0. En este lab la 28 arranca con 13 migraciones y 0 errores, y el repositorio y el webhook creados en la 1.27.3 siguen funcionando.

  • 8 pasos
  • 1

Cómo desplegar OpenBao en Docker con almacenamiento Raft

OpenBao es el gestor de secretos con licencia MPL 2.0 que mantiene la API de Vault. En este laboratorio lo levantas en Docker con la imagen 2.6.2 y almacenamiento Raft, lo inicializas con 5 claves, lo desellas con 3, guardas y lees un secreto en KV v2 y haces un snapshot de Raft como copia de seguridad.

  • 9 pasos
  • 1

llama.cpp server en Docker con una API compatible con OpenAI

llama-server, el servidor de llama.cpp, sirve un modelo GGUF con la misma API que OpenAI. En este laboratorio lo ejecutas en Docker con la imagen server-v0.5.0, descarga Qwen3.5 0.8B de Hugging Face a un volumen, exige una clave de API y contesta a /v1/chat/completions solo con CPU.

  • 5 pasos
  • 1

Cómo arreglar el error pull access denied de MinIO en Docker

El error pull access denied de MinIO aparece porque minio/minio ya no existe en Docker Hub. En este laboratorio confirmas el 404 en su API, levantas cgr.dev/chainguard/minio con Docker Compose, arreglas el file access denied con chown 65532 y creas un bucket y un objeto con el cliente mc de Chainguard.

  • 8 pasos
  • 1

Migrar MinIO a Garage paso a paso con rclone

Para migrar MinIO a Garage, levanta Garage v2.4.1 junto a MinIO en el mismo proyecto de Compose, crea una clave y el bucket de destino, copia con rclone sync y verifica con rclone check --download. En este lab, 300 objetos llegan con 0 diferencias y la clave de MinIO importada sigue leyéndolos desde Garage.

  • 7 pasos
  • 1

Qué es el DNS y cómo funciona (en la práctica, con dig)

El DNS (Sistema de Nombres de Dominio) es la agenda de Internet: traduce nombres como jacar.es en direcciones IP. Un servidor DNS recursivo recorre la jerarquía —raíz, dominio de nivel superior y servidor autoritativo— y cachea la respuesta. En este lab lo compruebas en vivo con dig y levantas tu propio servidor DNS validante con DNSSEC.

  • 9 pasos
  • 5

Cómo montar una VM agéntica con herdr y varios CLI de IA

Una VM agéntica reúne en una misma máquina el runtime que mantiene vivos a varios agentes de código, un contexto que todos leen y un acceso remoto. Este laboratorio la monta sobre Ubuntu con herdr, instala Claude Code, Codex, OpenCode y OpenClaw, y les da una memoria MCP común.

  • 10 pasos
  • 12

Cómo montar un registro Docker privado y autoalojado

Un registro Docker privado guarda y sirve tus propias imágenes de contenedor sin depender de Docker Hub. En este laboratorio levantas registry:3 con TLS, usando una CA propia en la que confía el cliente, y autenticación htpasswd: un push anónimo falla y, tras docker login, subes y recuperas una imagen alpine por HTTPS.

  • 11 pasos
  • 12

Multi-stage builds en Docker: imágenes más pequeñas y seguras

Un multi-stage build en Docker encadena varias etapas FROM en un mismo Dockerfile: una compila con el compilador completo y la etapa final, mínima (Alpine, scratch o distroless), solo copia el binario resultante con COPY --from=build. La imagen de producción queda mucho más pequeña y con menor superficie de ataque.

  • 10 pasos
  • 9

Healthchecks y políticas de reinicio en Docker (en la práctica, con docker run y Compose)

Un HEALTHCHECK le dice a Docker cómo comprobar si un contenedor funciona de verdad, no solo si sigue en marcha; docker inspect y docker ps muestran ese estado como healthy o unhealthy. Las políticas de reinicio deciden qué pasa si el proceso falla: no, on-failure, always o unless-stopped, y Compose puede esperar a un servicio healthy antes de arrancar otro.

  • 7 pasos
  • 10

Gestión de secretos en Docker (sin dejarlos en la imagen)

La gestión de secretos en Docker significa nunca dejar tokens ni contraseñas en ARG, ENV o COPY del Dockerfile, porque quedan grabados en la imagen para siempre. Este lab demuestra la fuga real con docker history y la corrige con BuildKit --secret, un archivo de solo lectura, un env-file acotado y los secrets nativos de Compose.

  • 9 pasos
  • 10

Proxy inverso con Traefik y Docker (enrutado real por Host)

Traefik con Docker es un proxy inverso que lee el socket de Docker y convierte las etiquetas de cada contenedor en reglas de enrutado automáticas. En este laboratorio lo levantas junto a dos backends y compruebas con curl que cada nombre de host llega al contenedor correcto, sin tocar ningún fichero de rutas.

  • 8 pasos
  • 4

Pi-hole en Docker: sinkhole DNS para bloquear anuncios en toda la red

Pi-hole es un servidor DNS que actúa como sinkhole: filtra las consultas de toda tu red antes de que lleguen a Internet y bloquea los dominios de publicidad y rastreo de sus listas, respondiendo 0.0.0.0 en vez de reenviarlas. En este lab lo levantas en Docker y lo compruebas en vivo con dig.

  • 7 pasos
  • 10

Copia de seguridad y restauración de volúmenes en Docker

Un volumen Docker guarda datos fuera del contenedor, en una ubicación que gestiona el propio Docker. Para respaldarlo, un contenedor alpine desechable monta el volumen y una carpeta del host, y empaqueta los datos con tar en un .tar.gz. Restaurar es el proceso inverso: extraer ese archivo dentro de un volumen nuevo y comprobar que los datos vuelven intactos.

  • 7 pasos
  • 11

Cómo montar una app multi-contenedor con Docker Compose

Docker Compose es la herramienta que describe una aplicación multi-contenedor en un único archivo YAML: qué servicios levantar, cómo se conectan en red y qué datos persisten en volúmenes con nombre. En este lab defines un servicio web con Nginx y una caché con Redis, los conectas por nombre de servicio y compruebas todo con curl.

  • 6 pasos
  • 9

Cómo persisten los datos en Docker con volúmenes y bind mounts

Un contenedor es efímero, pero sus datos no tienen por qué serlo. Un volumen de Docker vive fuera del contenedor, gestionado por Docker, mientras que un bind mount usa directamente una ruta del host. En este laboratorio creamos un volumen con nombre, escribimos datos desde un contenedor, lo eliminamos por completo y leemos esos mismos datos desde uno nuevo.

  • 9 pasos
  • 8

Cómo funcionan las redes en Docker (bridge y personalizadas)

Docker conecta los contenedores a una red bridge por defecto, pero esa red no resuelve nombres: solo funciona por IP. Al crear una red personalizada con docker network create, Docker activa un DNS interno y cada contenedor puede localizar a los demás por su nombre, quedando aislado del resto de redes.

  • 11 pasos
  • 11