Laboratorio de Docker: aprende contenedores, registros y reinicios arreglando un servicio roto

Este laboratorio enseña qué es un contenedor dando a cada alumno tres, uno de ellos roto a propósito: una página web, una cola y un worker que se detiene nada más arrancar. El alumno averigua por qué con docker ps y docker logs, mira dentro de un vecino sano con docker exec, corrige el ajuste que faltaba y vuelve a arrancar el worker con docker restart.

No es un laboratorio de ataque. Cada copia no tiene ruta a internet ni a ningún otro alumno, y el docker del terminal solo actúa sobre los tres contenedores de la copia del propio alumno.

Qué aprenden los alumnos

Qué es un contenedor y qué dicen las columnas de docker ps, incluido que un contenedor detenido sigue ahí hasta que se elimina y solo aparece con docker ps -a. Cómo leer el registro de un servicio para averiguar qué falla, cómo ejecutar un comando dentro de un contenedor en marcha y cómo reiniciarlo. Y la idea en torno a la que se construye el laboratorio: los archivos propios de un contenedor sobreviven a un reinicio pero desaparecen cuando el laboratorio se detiene, mientras que un volumen con nombre se conserva. Es adecuado para una introducción a los contenedores en una unidad de informática, redes o DevOps.

Ejecútalo en tu navegador

El laboratorio inicia la página web y la cola y espera a que ambas estén sanas. Después se inicia el worker y se detiene enseguida, que es el ejercicio: se espera que sea el único que no está en marcha.

  1. Abre la página Contenedor. Abre «Crear» en la barra y elige «Ejecutar un contenedor». Cualquiera puede abrir la página, y el laboratorio de Git y el de SQL se inician sin cuenta. Todos los demás laboratorios necesitan una cuenta gratuita: crea una, inicia sesión y pulsa «Iniciar».
  2. Busca el laboratorio. La tarjeta «Laboratorios de ejemplo» lista todos los ejemplos. Busca Docker basics.
  3. Pulsa «Iniciar». «Iniciar» lo ejecuta tal cual, con una sola pulsación. «Editar el archivo primero» abre el archivo compose para que lo cambies antes de iniciarlo.
  4. Ábrelo. En la página del laboratorio, pulsa «Abrir terminal» y escribe docker ps -a. El worker dice Exited (1). docker logs worker explica por qué: su archivo de ajustes, /settings/worker.conf, no tiene la línea QUEUE_HOST. Añade QUEUE_HOST=cache desde una shell dentro de web (docker exec -it web sh), ejecuta docker restart worker y docker ps lo muestra Up y healthy. El enlace Docker basics page, en «En tu navegador», muestra la página que sirve web.

Qué pedir a los alumnos que entreguen

La salida de docker ps -a antes de la corrección y después, la línea del registro que les dijo qué fallaba, y una frase que diga cuáles de los archivos que escribieron sobrevivirían a la detención del laboratorio y por qué. La última muestra si han entendido el sistema de archivos propio de un contenedor frente a un volumen.

Una lección básica en este laboratorio

Docker Basics es una lección breve hecha en este laboratorio. En ella el alumno lista los contenedores con docker ps -a, lee el registro del worker, imprime el archivo de ajustes desde dentro de web, añade la línea que falta, reinicia el worker y lo ve sano. Después detiene e inicia el laboratorio para comprobar que la corrección se conservó en el volumen con nombre.

Las cuentas personales gratuitas la tienen en el módulo Basics, que está en Inicio, cada centro puede copiarla de la carpeta Basics de la Biblioteca, y un centro nuevo la tiene en un módulo llamado Lab Basics (Sample). Es deliberadamente breve: muestra a un docente lo que es una lección hecha en un laboratorio, y el laboratorio hace el resto. Cópiala en un módulo propio para cambiarla.

El código en GitHub

El archivo compose no tiene ningún Dockerfile: ejecuta dos imágenes públicas estándar, nginx y Valkey, ambas fijadas a una versión, y escribe lo que hace cada servicio en su propio entrypoint, así que todo se puede leer en un solo archivo. La imagen de nginx tiene licencia BSD-2-Clause y Valkey BSD-3-Clause; ninguna la distribuimos nosotros. Un alumno nunca puede crear, descargar, construir ni eliminar un contenedor en un laboratorio, así que el laboratorio no lo pide; esos comandos funcionan en tu propio equipo.

Asígnalo como trabajo

Indica en la tarea qué entregar.

  1. Crea el laboratorio. En tu módulo añade una tarea y elige la tarjeta «Laboratorio de contenedores», y después «En un repositorio de GitHub». Indica https://github.com/mitsurutech/lab-docker-basics con la rama main. El archivo compose es el predeterminado, compose.yaml. Haz un fork del repositorio antes si quieres modificarlo.
  2. Publica y pruébalo. «Publicar» fija el commit que te mostraron, así que un cambio posterior en el repositorio no altera un laboratorio que ya has asignado. Inicia primero tu propia copia.
  3. Asígnalo. Asígnalo como cualquier tarea, con una fecha de entrega si quieres, e indica en la tarea qué hacer y qué entregar.
  4. Califica lo entregado. Abre la copia de un alumno y el trabajo que ha entregado, califícalo y devuélvelo con un motivo si necesita más.

Preguntas frecuentes

¿Por qué el worker no aparece en docker ps?
Se detiene nada más arrancar, porque le falta su ajuste, y docker ps solo lista lo que está en marcha. docker ps -a lista también los contenedores detenidos, y docker logs worker sigue mostrando lo que dijo.
¿Qué comandos docker funcionan en el terminal del laboratorio?
docker ps, docker logs, docker exec, docker restart y algunos más que solo miran los tres contenedores, como docker inspect. No se puede crear, descargar, construir ni eliminar nada, y docker volume y docker network se rechazan.
¿Qué queda después de detener e iniciar el laboratorio?
El volumen con nombre que contiene /settings, así que un worker corregido arranca sano enseguida. Los archivos que un alumno escribió en cualquier otro sitio dentro de un contenedor han desaparecido.