wsl-labs GitHub

🎓 Guía para principiantes — WSL Container Center#

Versión: v1 · Guía pensada para quien empieza con contenedores, wslc y este repositorio.

🗺️ Esquema#

graph TD
    subgraph START["🌱 Starter"]
        S1["01 · API Node.js"]
        S2["03 · API Python"]
        S3["10 · API Go"]
        S4["06 · Nginx web"]
    end
    subgraph PLAT["🧩 Platform"]
        P1["04 · Redis + app"]
        P2["05 · API + PostgreSQL"]
        P3["02 · LAMP"]
        P4["09 · Multi-servicio (Mongo)"]
    end
    subgraph INFRA["🏗️ Infra"]
        I1["07 · RabbitMQ"]
        I2["08 · Prometheus + Grafana"]
        I3["11 · Elasticsearch"]
        I4["12 · Jenkins"]
    end
    START --> PLAT --> INFRA

🧭 Si solo lees una cosa#

Empieza así:

  1. Instala WSL 2 (wsl --install) y habilita el motor de contenedores:

wsl --update --pre-release.

  1. Instala Node.js 18+ en Windows y arranca el panel: make serve

(o node dashboard-server/server.js).

  1. Abre el panel en http://localhost:9092.
  2. Elige un caso starter → 📦 Construir → ▶ Levantar.
  3. Pulsa 🌐 Abrir para verlo en el navegador.
  4. Cuando termines, ⏹ Bajar.

Documentos relacionados:


🐳 ¿Qué es un contenedor?#

Un contenedor es una unidad ligera y aislada que empaqueta una app con todo lo que necesita para correr (código, runtime, librerías), a partir de una imagen. Se crea, se ejecuta y se descarta sin "ensuciar" el sistema anfitrión — a diferencia de instalar un programa directamente en el sistema operativo.

Piensa en dos piezas:

desde un Dockerfile).


🐳 ¿Qué es wslc?#

WSLC es el motor de contenedores nativo de WSL que Microsoft añadió a partir de WSL 2.9+ (en preview). Se maneja con el comando wslc (ejecutable en C:\Program Files\WSL\wslc.exe) y su interfaz es casi idéntica a la de Docker: wslc build / run / images / list / logs / stop / rm / network.

wsl-labs es como docker-labs, pero el motor es wslc en vez de Docker. Es local: no hay Kubernetes ni nube; todo vive en tu Windows + WSL 2. Para la referencia completa del motor, lee el Track de contenedores WSLC.

Para obtener wslc:

wsl --update --pre-release
& "C:\Program Files\WSL\wslc.exe" version

🧱 Qué es este repositorio#

wsl-labs es un panel para levantar y controlar contenedores con wslc. Tiene tres piezas:

PiezaRol
🧭 Panel (Node.js, :9092)Construye imágenes, levanta/baja contenedores y muestra su estado
🪟 Launcher Windows (.exe)Verifica WSL 2, arranca el panel y abre el navegador
🐳 12 casos (containers/NN-*)Casos portados de docker-labs, ejecutados con wslc

Los 12 casos se agrupan en tres categorías:


🧠 Panel vs contenedor#

Esta es la confusión más común al inicio:

ConceptoQué significa
Panel (:9092)La capa que construye/levanta/baja contenedores con wslc
ContenedorLa app real (nginx, la API, redis…) que corre en el motor wslc

Ejemplo:

Por eso el panel separa el estado (¿está corriendo y sano?) del botón Abrir (entrar al contenedor real).


🚀 Primer flujo recomendado#

Paso 1 — Verifica los prerrequisitos#

wsl --status                                     # WSL en modo 2
node --version                                   # Node 18+ en Windows (para el panel)
& "C:\Program Files\WSL\wslc.exe" version        # motor wslc disponible

Necesitas como mínimo:

Paso 2 — Levanta el panel#

make serve
# o:
node dashboard-server/server.js

Paso 3 — Entra al panel#

Abre http://localhost:9092.

Paso 4 — Elige un caso simple#

CasoIdeal para aprender
01 API Node.jsConstruir una imagen custom y publicar un puerto
06 Nginx webServir contenido estático desde un contenedor
10 API GoImagen compilada multi-stage

Pulsa 📦 Construir → ▶ Levantar y luego 🌐 Abrir.

Paso 5 — Observa estas piezas#

Cada vez que levantes un caso, intenta responder:


📚 Ruta de aprendizaje (starter → platform → infra)#

El catálogo está pensado para subir de dificultad. Empieza por los starter y ve sumando complejidad.

🌱 Nivel 1 — Starter (un contenedor)#

CasoQué aprendes
01 API Node.jsConstruir imagen custom (node:20-alpine) y publicar :8101
03 API PythonAPI Flask en contenedor (python:3.12-alpine) en :8102
10 API GoImagen multi-stage compilada en :8103
06 Nginx webServir estáticos con nginx:alpine en :8104

🧩 Nivel 2 — Platform (multi-contenedor + red)#

CasoQué aprendes
04 Redis + appApp Node que habla con redis:7-alpine por una red wslc (:8105)
05 API + PostgreSQLAPI Python conectada a postgres:15 por red (:8106)
02 LAMPPHP + Apache con mariadb:10.6 por red (:8107)
09 Multi-servicioBackend Node + mongo:7 por red (:8112)

🏗️ Nivel 3 — Infra (imágenes públicas)#

CasoQué aprendes
07 RabbitMQBroker de mensajería con panel de administración (:8109)
08 Prometheus + GrafanaObservabilidad: métricas + dashboards por red (:8110/:8111)
11 ElasticsearchMotor de búsqueda de nodo único (:8113)
12 Jenkins CIServidor de integración continua (:8114)

💻 Recomendación de hardware#

PerfilCPURAMDiscoUso recomendado
Básico2 núcleos8 GB15 GBPanel + 1 caso starter
Cómodo4 núcleos16 GB25 GB SSDPanel + varios casos platform
Avanzado4+ núcleos16 GB+30 GB SSDCasos infra (Elasticsearch, Jenkins)
Los casos infra (11 Elasticsearch, 12 Jenkins) consumen bastante RAM y tardan más en arrancar. Con 8 GB, quédate en starter/platform.

⚠️ Errores comunes#

El panel abre, pero el caso no#

Posibles causas:

El panel dice "unavailable"#

wslc no está disponible. Actualiza WSL con wsl --update --pre-release, reinicia con wsl --shutdown y comprueba & "C:\Program Files\WSL\wslc.exe" version.

Un caso queda "degraded" un rato#

El contenedor arrancó pero su proceso interno aún no responde. Refresca el panel; pasará a running. Los casos infra (Elasticsearch, Jenkins) tardan más. Si persiste, revisa la Guía de resolución de problemas.


✅ Objetivo de esta guía#

Que puedas pasar de:

a:

y entiendo la diferencia entre starter, platform e infra".


🔗 Documentos relacionados#

Fuente: docs/BEGINNERS_GUIDE.md