Como ejecutar en Windows un entorno creado en Ubuntu


Docker ofrece ventajas clave para el desarrollo y despliegue de aplicaciones, especialmente cuando necesitas portabilidad, consistencia y eficiencia. Estas son las principales ventajas de usar Docker:

  • Portabilidad total: Los contenedores Docker encapsulan la aplicación junto con todas sus dependencias, lo que permite ejecutarla en cualquier sistema que tenga Docker instalado, independientemente del sistema operativo o la configuración de la máquina anfitriona
  • Aislamiento: Cada aplicación corre en su propio contenedor, lo que evita conflictos entre diferentes aplicaciones o versiones de librerías. Esto facilita el desarrollo de múltiples proyectos en paralelo y mejora la seguridad.
  • Consistencia de entornos: Docker elimina el clásico problema de «funciona en mi máquina» porque garantiza que el entorno de desarrollo, pruebas y producción sean idénticos para todos los usuarios y equipos.
  • Eficiencia en el uso de recursos: Los contenedores son mucho más ligeros que las máquinas virtuales tradicionales, ya que no requieren un sistema operativo completo para cada instancia. Esto permite ejecutar más aplicaciones en el mismo hardware, ahorrando recursos y costes.
  • Escalabilidad y rapidez: Es fácil escalar aplicaciones añadiendo o eliminando contenedores según la demanda. Además, los contenedores se inician en segundos, acelerando el despliegue y la respuesta ante cambios o picos de trabajo.
  • Automatización y DevOps: Docker se integra perfectamente con flujos de trabajo DevOps y herramientas de CI/CD, facilitando la automatización de pruebas, despliegues y actualizaciones de aplicaciones.
  • Control de versiones y modularidad: Docker permite versionar imágenes, retroceder a versiones anteriores y reutilizar componentes, facilitando el mantenimiento y la colaboración en equipos grandes
  • Facilidad de colaboración: Los equipos pueden compartir imágenes Docker preconfiguradas, asegurando que todos trabajen en el mismo entorno y reduciendo errores por diferencias de configuración.

En resumen, Docker te permite desarrollar, probar y desplegar aplicaciones de forma más rápida, consistente, eficiente y segura, facilitando la colaboración y la portabilidad entre diferentes sistemas y equipos.

Aquí vamos a ver paso a paso para implementar la solución híbrida WSL 2 + Docker de un entorno funcional en Ubuntu y que tiene instalado NILMTK, NILMTK-CONTRIB y NILMTK-METADATA:

📦 Paso 1: Exportar entorno Ubuntu desde máquina física

1.1 Preparar sistema Ubuntu

# En tu máquina física Ubuntu:
sudo apt update && sudo apt upgrade -y
sudo apt install docker.io tar -y
sudo systemctl enable docker

1.2 Crear imagen Docker del entorno

# Crear Dockerfile
cat <<EOF > Dockerfile
FROM ubuntu:22.04
RUN apt update && apt install -y python3.8 python3-pip \
&& pip install nilmtk==0.4.3 nilm_metadata==0.2.4
EOF

# Construir imagen
sudo docker build -t nilmtk-env .

1.3 Exportar imagen Docker

sudo docker save nilmtk-env > nilmtk-env.tar

🖥️ Paso 2: Configurar WSL 2 en Windows 11

2.1 Habilitar WSL 2

powershell# Ejecutar como Administrador
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
wsl --set-default-version 2

2.2 Instalar distribución Ubuntu

powershellwsl --install -d Ubuntu-22.04

🔄 Paso 3: Importar entorno a WSL 2

3.1 Transferir archivo .tar

bash# Desde Ubuntu físico:
scp nilmtk-env.tar usuario@windows:/mnt/c/Users/tu_usuario/

3.2 Importar imagen en WSL 2

bash# En WSL Ubuntu:
docker load < /mnt/c/Users/tu_usuario/nilmtk-env.tar

🐳 Paso 4: Configurar Docker Desktop

4.1 Instalar Docker Desktop

  1. Descargar desde docker.com
  2. Instalar con opción WSL 2 backend activada

4.2 Integrar WSL 2

  1. Abrir Docker Desktop
  2. Ir a Settings > Resources > WSL Integration
  3. Activar integración con Ubuntu-22.04

![Integración WSL en Docker](https://docs.docker.com/desktop/images 🚀 Paso 5: Ejecutar entorno NILMTK

5.1 Iniciar contenedor

bashdocker run -it --rm \
  -v $(pwd):/nilmtk \
  --gpus all \
  nilmtk-env \
  bash

5.2 Verificar instalación

bash# Dentro del contenedor:
python3 -c "import nilmtk; print(nilmtk.__version__)"
# Debe mostrar: 0.4.3

textgraph TD
    A[Windows 11] --> B[WSL 2 Ubuntu]
    B --> C[Docker Desktop]
    C --> D[Contenedor nilmtk-env]
    D --> E[VS Code]

Comandos útiles:

FunciónComando
Acceder WSLwsl -d Ubuntu-22.04
Limpiar memoriawsl --shutdown
Ver recursosdocker stats

⚠️ Solución de problemas comunes

Error: «WSL integration not available»

powershellwsl --update
Restart-Service LxssManager

Error: «GPU not detected»

  1. Actualizar drivers NVIDIA
  2. Instalar WSL CUDA support

Espacio en disco insuficiente

bash# Compactar VHDX de WSL
wsl --shutdown
diskpart
select vdisk file="C:\Users\tu_usuario\AppData\Local\Packages\...\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

Con este setup tendrás un entorno 100% funcional de NILMTK en Windows 11, combinando lo mejor de WSL 2 y Docker. 🐧+🪟=💥