wsl-labs GitHub

🐳 Guía de contenedores con WSLC#

Guía general del enfoque de WSL Container Center: qué es wslc, cómo se usan los 12 casos del catálogo y cómo se traducen los comandos wslcdocker. Para el estado del proyecto consulta el PROJECT_STATUS.md.

📖 ¿Qué es WSLC?#

WSLC es el motor de contenedores nativo que Microsoft integró en WSL (a partir de WSL 2.9+). 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 / up / down / pull / images / list / logs / network.

WSLC construye imágenes OCI reales por capas a partir de un Dockerfile (FROM nginx:alpine, FROM node:20-alpine, …) y levanta contenedores aislados con red y filesystem propios — igual que cualquier runtime de contenedores. No hay demonios apt dentro de la distro: cada caso es una imagen y uno o varios contenedores que se crean y se descartan.

WSLC está en preview. Requiere WSL 2.9+ con el componente de contenedores habilitado. Si wslc no existe en tu máquina, se obtiene con: ``powershell wsl --update --pre-release ``

🆚 wslc frente a Docker#

Aspecto🐳 WSLC🐋 Docker
MotorNativo de WSL 2.9+ (preview)Docker Engine / Docker Desktop
EjecutableC:\Program Files\WSL\wslc.exedocker
ImágenesOCI reales por capas desde DockerfileOCI reales por capas desde Dockerfile
Multi-contenedorContenedores + red wslcdocker compose
Puertos-p host:container-p host:container
InstalaciónYa viene con WSL previewRequiere instalar Docker Desktop
Si sabes Docker, sabes WSLC. El modelo mental —imagen, contenedor, red, puerto— es el mismo; cambia el binario y que el motor viene incluido en WSL.

🗺️ Esquema#

flowchart LR
    D["Dockerfile\n(FROM alpine)"] --> B["wslc build"]
    B --> I["imagen OCI\n(capas)"]
    I --> U["wslc run\n-p 8104:80"]
    U --> C["contenedor\nwslc-nginx-web"]
    C --> PT["puerto\n:8104"]
    PT --> NAV["navegador\nWindows"]

⚙️ Requisitos e instalación#

RequisitoDetalle
WSL2.9+ con el componente WSLC (preview)
EjecutableC:\Program Files\WSL\wslc.exe
SistemaWindows 10/11 con WSL 2

1. Actualizar WSL a la versión preview (trae el motor de contenedores):

wsl --update --pre-release
wsl --version

2. Verificar que wslc está disponible usando la ruta completa:

& "C:\Program Files\WSL\wslc.exe" --version
Si wslc no aparece tras actualizar, reinicia WSL con wsl --shutdown y vuelve a comprobarlo. El panel localiza el binario en C:\Program Files\WSL\wslc.exe; si tu instalación lo tiene en otra ruta, no encontrará el motor.

📦 Cómo se usan los 12 casos#

El catálogo containers/containers.config.json es la fuente única de verdad: define para cada caso su imagen(es), puerto host, red y contenedores. Los 12 casos se agrupan en tres categorías:

(Redis, PostgreSQL, MariaDB/LAMP, MongoDB).

Prometheus+Grafana, Elasticsearch, Jenkins).

Para el rol de cada caso y su puerto, consulta el catálogo de casos; para el detalle operativo (imagen, comando wslc real, red, health y RAM), la referencia de runtime.

Ciclo de vida de un caso#

# 1. Construir las imágenes custom del caso (desde su Dockerfile)
wslc build -t wsl-labs/nginx-web:latest containers/06-nginx-web

# 2. Levantar el/los contenedor(es)
wslc run -d --name wslc-nginx-web -p 8104:80 wsl-labs/nginx-web:latest

# 3. Verificar desde Windows
curl http://localhost:8104

Los casos platform y infra multi-contenedor crean primero una red wslc y conectan los contenedores por nombre de servicio (por ejemplo, la app apunta a REDIS_HOST=wslc-redis). El detalle por caso está en la referencia de runtime.


🧭 Uso desde el panel (WSL Container Center)#

El panel Node.js (localhost:9092) incorpora la sección de contenedores con botones por caso. Endpoints:

BotónAcciónEndpoint
🔨 Construirwslc build de las imágenes del casoPOST /api/wslc/build
Levantarcrea red (si aplica) y hace wslc run de los contenedoresPOST /api/wslc/up
🛑 Bajardetiene y elimina contenedores del casoPOST /api/wslc/down
📄 Logswslc logs del contenedor principalPOST /api/wslc/logs
📊 Overviewestado de todos los casos + detección de wslcGET /api/wslc/overview

El panel localiza el motor en C:\Program Files\WSL\wslc.exe y avisa si no está.

Primero Construir (una vez por caso, solo los que tienen imágenes custom), luego Levantar. Al Bajar, los contenedores se descartan pero las imágenes construidas permanecen en wslc images listas para volver a levantarse.

📋 Comandos wslcdocker#

wslc reproduce el subconjunto más habitual de docker:

Comando wslcQué haceEquivalente Docker
wslc build -t nombre:tag ctxConstruye una imagen desde un Dockerfiledocker build
wslc run -d --name N -p H:C imgLevanta un contenedor en segundo planodocker run -d
wslc stop <nombre>Detiene y elimina un contenedordocker rm -f
wslc pull imagen:tagDescarga una imagen de un registrodocker pull
wslc imagesLista imágenes localesdocker images
wslc listLista contenedoresdocker ps
wslc logs <nombre>Muestra los logs de un contenedordocker logs
wslc network create <red>Crea una red de contenedoresdocker network create
wslc network …Gestiona redesdocker network
Un stack multi-contenedor (app + base de datos) que en Docker harías con docker compose, en WSLC se arma con una red wslc y varios wslc run conectados por nombre. Ver mapeo desde docker-labs.

🚦 Límites de recursos y 💽 persistencia#

El panel aplica automáticamente, al Levantar cada caso:

valor recomendado medido de cada caso (ver REQUIREMENTS.md) y la CPU según la categoría (starter 0.5 · platform 1 · infra 2). El panel lo muestra como 🚦 tope … en cada tarjeta. (WSL puede avisar "Memory limited without swap" — es inocuo; el límite de RAM se aplica igual.)

de datos (PostgreSQL, MariaDB, MongoDB, Elasticsearch, RabbitMQ, Jenkins) montan un volumen con nombre en su directorio de datos. Así, al Bajar un caso se eliminan los contenedores pero el volumen se conserva: los datos sobreviven al siguiente Levantar. El panel marca estos casos con 💽 persistente.

# Equivalente manual de lo que hace el panel para postgres-api:
wslc volume create wslc-pgdata
wslc run -d --name wslc-postgres --network wslc-pg-net -m 1024M --cpus 1 \
  -e POSTGRES_PASSWORD=wsl-labs -e POSTGRES_DB=app \
  -v wslc-pgdata:/var/lib/postgresql/data postgres:15
Para borrar también los datos de un caso, elimina su volumen a mano: wslc volume ls y wslc volume rm <nombre> (o wslc volume prune para los huérfanos). Ver la referencia CLI de wslc.

🔗 Ver también#

Fuente: docs/wslc-contenedores.md