Windows dentro de un contenedor Docker.
A través de Docker Compose:
services :
windows :
image : dockurr/windows
container_name : windows
environment :
VERSION : " 11 "
devices :
- /dev/kvm
cap_add :
- NET_ADMIN
ports :
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
stop_grace_period : 2m
A través de Docker CLI:
docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows
A través de Kubernetes:
kubectl apply -f kubernetes.yml
¡Muy sencillo! Estos son los pasos:
Inicie el contenedor y conéctese al puerto 8006 usando su navegador web.
Siéntate y relájate mientras ocurre la magia, toda la instalación se realizará de forma totalmente automática.
Una vez que vea el escritorio, su instalación de Windows estará lista para usar.
¡Disfruta de tu nueva máquina y no olvides destacar este repositorio!
De forma predeterminada, se instalará Windows 11. Pero puede agregar la variable de entorno VERSION
a su archivo de redacción para especificar una versión alternativa de Windows para descargar:
environment :
VERSION : " 11 "
Seleccione entre los valores siguientes:
Valor | Versión | Tamaño |
---|---|---|
11 | Windows 11 Pro | 5,4GB |
11l | Windows 11 LTSC | 4,2GB |
11e | Windows 11 Empresa | 5,8GB |
10 | Windows 10 Pro | 5,7GB |
10l | Windows 10 LTSC | 4,6GB |
10e | Windows 10 Empresa | 5,2GB |
8 | Windows 8.1 Pro | 4,0GB |
8e | Windows 8.1 Empresa | 3,7GB |
7e | Windows 7 Empresa | 3,0 GB |
ve | Windows Vista Empresarial | 3,0GB |
xp | Windows XP Profesional | 0,6GB |
2025 | Servidor Windows 2025 | 5,0GB |
2022 | Servidor Windows 2022 | 4,7GB |
2019 | Servidor Windows 2019 | 5,3GB |
2016 | Servidor Windows 2016 | 6,5GB |
2012 | Servidor Windows 2012 | 4,3GB |
2008 | Servidor Windows 2008 | 3,0GB |
2003 | Servidor Windows 2003 | 0,6GB |
Consejo
Para instalar versiones ARM64 de Windows, utilice Dockur/Windows-arm.
Para cambiar la ubicación de almacenamiento, incluya el siguiente montaje de enlace en su archivo de redacción:
volumes :
- /var/win:/storage
Reemplace la ruta de ejemplo /var/win
con la carpeta de almacenamiento deseada.
Para ampliar el tamaño predeterminado de 64 GB, agregue la configuración DISK_SIZE
a su archivo de redacción y configúrelo en su capacidad preferida:
environment :
DISK_SIZE : " 256G "
Consejo
Esto también se puede utilizar para cambiar el tamaño del disco existente a una capacidad mayor sin pérdida de datos.
Abra 'Explorador de archivos' y haga clic en la sección 'Red', verá una computadora llamada host.lan
. Haga doble clic en él y se mostrará una carpeta llamada Data
, que se puede vincular a cualquier carpeta en su host a través del archivo de redacción:
volumes :
- /home/user/example:/data
La carpeta de ejemplo /home/user/example
estará disponible como \host.lanData
.
Consejo
Puede asignar esta ruta a una letra de unidad en Windows para facilitar el acceso.
Para descargar una imagen ISO no compatible que no se puede seleccionar de la lista anterior, especifique la URL de esa ISO en la variable de entorno VERSION
, por ejemplo:
environment :
VERSION : " https://example.com/win.iso "
Alternativamente, también puedes omitir la descarga y usar un archivo local, vinculándolo en tu archivo de redacción de esta manera:
volumes :
- /home/user/example.iso:/custom.iso
Reemplace la ruta de ejemplo /home/user/example.iso
con el nombre de archivo del archivo ISO que desee; en este caso, se ignorará el valor de VERSION
.
Para ejecutar su propio script después de la instalación, puede crear un archivo llamado install.bat
y colocarlo en una carpeta junto con los archivos adicionales que necesite (por ejemplo, el software que se instalará). Luego vincule esa carpeta en su archivo de redacción de esta manera:
volumes :
- /home/user/example:/oem
La carpeta de ejemplo /home/user/example
se copiará a C:OEM
durante la instalación y el install.bat
que la contiene se ejecutará durante el último paso.
Es mejor seguir con la instalación automática, ya que ajusta varias configuraciones para evitar problemas comunes al ejecutar Windows dentro de un entorno virtual.
Sin embargo, si insiste en realizar la instalación manualmente, agregue la siguiente variable de entorno a su archivo de redacción:
environment :
MANUAL : " Y "
De forma predeterminada, el contenedor podrá utilizar un máximo de 2 núcleos de CPU y 4 GB de RAM.
Si desea ajustar esto, puede especificar la cantidad deseada utilizando las siguientes variables de entorno:
environment :
RAM_SIZE : " 8G "
CPU_CORES : " 4 "
De forma predeterminada, durante la instalación se crea un usuario llamado Docker
, con una contraseña vacía.
Si desea utilizar credenciales diferentes, puede cambiarlas en su archivo de redacción:
environment :
USERNAME : " bill "
PASSWORD : " gates "
De forma predeterminada, se descargará la versión en inglés de Windows. Pero puede agregar la variable de entorno LANGUAGE
a su archivo de redacción para especificar un idioma alternativo:
environment :
LANGUAGE : " French "
Puedes elegir entre: ?? árabe, ?? búlgaro, ?? Chino, ?? croata, ?? checo, ?? Danés, ?? Holandés, ?? Inglés, ?? estonio, ?? Finlandés, ?? Francés, ?? Alemán, ?? Griego, ?? hebreo, ?? Húngaro, ?? italiano, ?? Japonés, ?? Coreano, ?? letón, ?? lituano, ?? noruego, ?? Polaco, ?? portugués, ?? rumano, ?? Ruso, ?? serbio, ?? eslovaco, ?? esloveno, ?? Español, ?? sueco, ?? Tailandés, ?? Turco y ?? Ucranio.
Si desea utilizar una distribución de teclado o una configuración regional que no sea la predeterminada para el idioma seleccionado, puede agregar las variables KEYBOARD
y REGION
con un código cultural, como este:
environment :
REGION : " en-US "
KEYBOARD : " en-US "
Nota
Cambiar estos valores no tendrá ningún efecto una vez realizada la instalación. Utilice el panel de control dentro de Windows en ese caso.
El visor web está pensado principalmente para utilizarse durante la instalación, ya que su calidad de imagen es baja y no tiene audio ni portapapeles, por ejemplo.
Entonces, para una mejor experiencia, puede conectarse usando cualquier cliente de Escritorio remoto de Microsoft a la IP del contenedor, usando el nombre de usuario Docker
y dejando la contraseña vacía.
Hay un cliente RDP para Android disponible en Play Store y uno para iOS en Apple Store. Para Linux puedes usar FreeRDP y en Windows simplemente escribe mstsc
en el cuadro de búsqueda.
De forma predeterminada, el contenedor utiliza una red puente, que comparte la dirección IP con el host.
Si desea asignar una dirección IP individual al contenedor, puede crear una red macvlan de la siguiente manera:
docker network create -d macvlan
--subnet=192.168.0.0/24
--gateway=192.168.0.1
--ip-range=192.168.0.100/28
-o parent=eth0 vlan
Asegúrese de modificar estos valores para que coincidan con su subred local.
Una vez que haya creado la red, cambie su archivo de redacción para que tenga el siguiente aspecto:
services :
windows :
container_name : windows
....
networks :
vlan :
ipv4_address : 192.168.0.100
networks :
vlan :
external : true
Un beneficio adicional de este enfoque es que ya no tendrá que realizar ninguna asignación de puertos, ya que todos los puertos estarán expuestos de forma predeterminada.
Importante
No se podrá acceder a esta dirección IP desde el host Docker debido al diseño de macvlan, que no permite la comunicación entre los dos. Si esto le preocupa, debe crear un segundo macvlan como solución alternativa.
Después de configurar el contenedor para macvlan, es posible que Windows forme parte de su red doméstica solicitando una IP a su enrutador, como una PC real.
Para habilitar este modo, agregue las siguientes líneas a su archivo de redacción:
environment :
DHCP : " Y "
devices :
- /dev/vhost-net
device_cgroup_rules :
- ' c *:* rwm '
Nota
En este modo, el contenedor y Windows tendrán cada uno sus propias IP independientes.
Para crear discos adicionales, modifique su archivo de redacción de esta manera:
environment :
DISK2_SIZE : " 32G "
DISK3_SIZE : " 64G "
volumes :
- /home/example:/storage2
- /mnt/data/example:/storage3
Es posible pasar dispositivos de disco directamente agregándolos a su archivo de redacción de esta manera:
devices :
- /dev/sdb:/disk1
- /dev/sdc:/disk2
Utilice /disk1
si desea que se convierta en su unidad principal (que se formateará durante la instalación), y utilice /disk2
y superiores para agregarlas como unidades secundarias (que permanecerán intactas).
Para pasar a través de un dispositivo USB, primero busque su proveedor y su identificación de producto mediante el comando lsusb
, luego agréguelos a su archivo de redacción de esta manera:
environment :
ARGUMENTS : " -device usb-host,vendorid=0x1234,productid=0x1234 "
devices :
- /dev/bus/usb
Importante
Si el dispositivo es una unidad de disco USB, espere hasta que se complete la instalación antes de conectarlo. De lo contrario, la instalación puede fallar, ya que se puede reorganizar el orden de los discos.
Solo Linux y Windows 11 admiten la virtualización KVM, desafortunadamente macOS y Windows 10 no lo hacen.
Puede ejecutar los siguientes comandos en Linux para verificar su sistema:
sudo apt install cpu-checker
sudo kvm-ok
Si recibe un error de kvm-ok
que indica que no se puede utilizar KVM, verifique si:
las extensiones de virtualización ( Intel VT-x
o AMD SVM
) están habilitadas en su BIOS.
habilitó la "virtualización anidada" si está ejecutando el contenedor dentro de una máquina virtual.
No está utilizando un proveedor de nube, ya que la mayoría de ellos no permiten la virtualización anidada para sus VPS.
Si no recibe ningún error de kvm-ok
pero el contenedor aún presenta quejas sobre KVM, verifique si:
No está utilizando "Docker Desktop para Linux", ya que no es compatible con KVM; en su lugar, utilice Docker Engine directamente.
Podría ser útil agregar privileged: true
a su archivo de redacción (o sudo
a su comando docker run
), para descartar cualquier problema de permisos.
Puedes usar Dockur/macos para eso. Comparte muchas de las mismas características, excepto la instalación automática.
Sí, este proyecto contiene únicamente código fuente abierto y no distribuye ningún material protegido por derechos de autor. Todas las claves de producto que se encuentran en el código son simplemente marcadores de posición genéricos proporcionados por Microsoft con fines de prueba. Entonces, según todas las leyes aplicables, este proyecto se considerará legal.
Los nombres de productos, logotipos, marcas y otras marcas comerciales a las que se hace referencia en este proyecto son propiedad de sus respectivos titulares de marcas comerciales. Este proyecto no está afiliado, patrocinado ni respaldado por Microsoft Corporation.