Windows dentro de um contêiner Docker.
Através do 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
Através da CLI do Docker:
docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows
Através do Kubernetes:
kubectl apply -f kubernetes.yml
Muito simples! Estas são as etapas:
Inicie o contêiner e conecte-se à porta 8006 usando seu navegador da web.
Sente-se e relaxe enquanto a mágica acontece, toda a instalação será realizada de forma totalmente automática.
Depois de ver a área de trabalho, a instalação do Windows estará pronta para uso.
Aproveite sua nova máquina e não se esqueça de marcar este repositório com estrela!
Por padrão, o Windows 11 será instalado. Mas você pode adicionar a variável de ambiente VERSION
ao seu arquivo de composição, para especificar uma versão alternativa do Windows a ser baixada:
environment :
VERSION : " 11 "
Selecione entre os valores abaixo:
Valor | Versão | Tamanho |
---|---|---|
11 | Windows 11 Pró | 5,4GB |
11l | Windows 11 LTSC | 4,2 GB |
11e | Windows 11 Empresarial | 5,8GB |
10 | Windows 10 Pró | 5,7GB |
10l | Windows 10 LTSC | 4,6GB |
10e | Windows 10 Empresarial | 5,2GB |
8 | Windows 8.1 Pró | 4,0GB |
8e | Windows 8.1 Empresarial | 3,7 GB |
7e | Windows 7 Empresarial | 3,0GB |
ve | Windows Vista Empresarial | 3,0GB |
xp | Windows XP Profissional | 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,3 GB |
2008 | Servidor Windows 2008 | 3,0GB |
2003 | Servidor Windows 2003 | 0,6GB |
Dica
Para instalar versões ARM64 do Windows, use dockur/windows-arm.
Para alterar o local de armazenamento, inclua a seguinte montagem de ligação em seu arquivo de composição:
volumes :
- /var/win:/storage
Substitua o caminho de exemplo /var/win
pela pasta de armazenamento desejada.
Para expandir o tamanho padrão de 64 GB, adicione a configuração DISK_SIZE
ao seu arquivo de composição e defina-o com sua capacidade preferida:
environment :
DISK_SIZE : " 256G "
Dica
Isso também pode ser usado para redimensionar o disco existente para uma capacidade maior sem perda de dados.
Abra o 'Explorador de Arquivos' e clique na seção 'Rede', você verá um computador chamado host.lan
. Clique duas vezes nele e uma pasta chamada Data
será exibida, que pode ser vinculada a qualquer pasta do seu host por meio do arquivo de composição:
volumes :
- /home/user/example:/data
A pasta de exemplo /home/user/example
estará disponível como \host.lanData
.
Dica
Você pode mapear esse caminho para uma letra de unidade no Windows, para facilitar o acesso.
Para baixar uma imagem ISO não suportada que não pode ser selecionada na lista acima, especifique a URL dessa ISO na variável de ambiente VERSION
, por exemplo:
environment :
VERSION : " https://example.com/win.iso "
Alternativamente, você também pode pular o download e usar um arquivo local, vinculando-o ao seu arquivo de composição desta forma:
volumes :
- /home/user/example.iso:/custom.iso
Substitua o caminho de exemplo /home/user/example.iso
pelo nome do arquivo ISO desejado, o valor de VERSION
será ignorado neste caso.
Para executar seu próprio script após a instalação, você pode criar um arquivo chamado install.bat
e colocá-lo em uma pasta junto com quaisquer arquivos adicionais necessários (software a ser instalado, por exemplo). Em seguida, vincule essa pasta ao seu arquivo de composição assim:
volumes :
- /home/user/example:/oem
A pasta de exemplo /home/user/example
será copiada para C:OEM
durante a instalação e o install.bat
contido será executado durante a última etapa.
É melhor manter a instalação automática, pois ela ajusta várias configurações para evitar problemas comuns ao executar o Windows em um ambiente virtual.
No entanto, se você insistir em realizar a instalação manualmente, adicione a seguinte variável de ambiente ao seu arquivo de composição:
environment :
MANUAL : " Y "
Por padrão, o contêiner poderá usar no máximo 2 núcleos de CPU e 4 GB de RAM.
Se quiser ajustar isso, você pode especificar a quantidade desejada usando as seguintes variáveis de ambiente:
environment :
RAM_SIZE : " 8G "
CPU_CORES : " 4 "
Por padrão, um usuário chamado Docker
é criado durante a instalação, com uma senha vazia.
Se quiser usar credenciais diferentes, você pode alterá-las em seu arquivo de composição:
environment :
USERNAME : " bill "
PASSWORD : " gates "
Por padrão, a versão em inglês do Windows será baixada. Mas você pode adicionar a variável de ambiente LANGUAGE
ao seu arquivo de composição, para especificar um idioma alternativo:
environment :
LANGUAGE : " French "
Você pode escolher entre: ?? Árabe, ?? Búlgaro, ?? Chinês, ?? Croata, ?? Tcheco, ?? Dinamarquês, ?? Holandês, ?? Inglês, ?? Estónio, ?? Finlandês, ?? Francês, ?? Alemão, ?? Grego, ?? Hebraico, ?? Húngaro, ?? Italiano, ?? Japonês, ?? Coreano, ?? Letão, ?? Lituano, ?? Norueguês, ?? Polonês, ?? Português, ?? Romeno, ?? Russo, ?? Sérvio, ?? Eslovaco, ?? Esloveno, ?? Espanhol, ?? Sueco, ?? Tailandês, ?? Turco e ?? Ucraniano.
Se quiser usar um layout de teclado ou localidade que não seja o padrão para o idioma selecionado, você pode adicionar as variáveis KEYBOARD
e REGION
com um código de cultura, como este:
environment :
REGION : " en-US "
KEYBOARD : " en-US "
Observação
A alteração desses valores não terá efeito após a instalação já ter sido realizada. Use o painel de controle do Windows nesse caso.
O visualizador web destina-se principalmente a ser usado durante a instalação, pois sua qualidade de imagem é baixa e não possui áudio ou área de transferência, por exemplo.
Portanto, para uma melhor experiência você pode conectar-se usando qualquer cliente Microsoft Remote Desktop ao IP do container, usando o nome de usuário Docker
e deixando a senha vazia.
Existe um cliente RDP para Android disponível na Play Store e outro para iOS na Apple Store. Para Linux você pode usar FreeRDP e no Windows basta digitar mstsc
na caixa de pesquisa.
Por padrão, o contêiner usa rede bridge, que compartilha o endereço IP com o host.
Se quiser atribuir um endereço IP individual ao contêiner, você pode criar uma rede macvlan da seguinte maneira:
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
Certifique-se de modificar esses valores para corresponderem à sua sub-rede local.
Depois de criar a rede, altere seu arquivo de composição para ter a seguinte aparência:
services :
windows :
container_name : windows
....
networks :
vlan :
ipv4_address : 192.168.0.100
networks :
vlan :
external : true
Um benefício adicional dessa abordagem é que você não precisará mais realizar nenhum mapeamento de portas, pois todas as portas serão expostas por padrão.
Importante
Este endereço IP não estará acessível a partir do host Docker devido ao design do macvlan, que não permite a comunicação entre os dois. Se isso for uma preocupação, você precisará criar um segundo macvlan como solução alternativa.
Após configurar o container para macvlan, é possível que o Windows passe a fazer parte da sua rede doméstica solicitando um IP do seu roteador, como um PC real.
Para ativar este modo, adicione as seguintes linhas ao seu arquivo de composição:
environment :
DHCP : " Y "
devices :
- /dev/vhost-net
device_cgroup_rules :
- ' c *:* rwm '
Observação
Nesse modo, o contêiner e o Windows terão seus próprios IPs separados.
Para criar discos adicionais, modifique seu arquivo de composição assim:
environment :
DISK2_SIZE : " 32G "
DISK3_SIZE : " 64G "
volumes :
- /home/example:/storage2
- /mnt/data/example:/storage3
É possível passar diretamente por dispositivos de disco adicionando-os ao seu arquivo de composição desta forma:
devices :
- /dev/sdb:/disk1
- /dev/sdc:/disk2
Use /disk1
se quiser que ele se torne sua unidade principal (que será formatada durante a instalação) e use /disk2
e superior para adicioná-los como unidades secundárias (que permanecerão intactas).
Para passar por um dispositivo USB, primeiro procure o fornecedor e o ID do produto por meio do comando lsusb
e, em seguida, adicione-os ao seu arquivo de composição como este:
environment :
ARGUMENTS : " -device usb-host,vendorid=0x1234,productid=0x1234 "
devices :
- /dev/bus/usb
Importante
Se o dispositivo for uma unidade de disco USB, aguarde até a instalação ser concluída antes de conectá-lo. Caso contrário, a instalação poderá falhar, pois a ordem dos discos poderá ser reorganizada.
Apenas Linux e Windows 11 suportam virtualização KVM, macOS e Windows 10, infelizmente, não.
Você pode executar os seguintes comandos no Linux para verificar seu sistema:
sudo apt install cpu-checker
sudo kvm-ok
Se você receber um erro do kvm-ok
indicando que o KVM não pode ser usado, verifique se:
as extensões de virtualização ( Intel VT-x
ou AMD SVM
) estão habilitadas em seu BIOS.
você ativou a "virtualização aninhada" se estiver executando o contêiner dentro de uma máquina virtual.
você não está usando um provedor de nuvem, pois a maioria deles não permite virtualização aninhada para seus VPSs.
Se você não receber nenhum erro do kvm-ok
, mas o contêiner ainda reclamar do KVM, verifique se:
você não está usando o "Docker Desktop for Linux", pois ele não suporta KVM; em vez disso, use o Docker Engine diretamente.
pode ajudar adicionar privileged: true
ao seu arquivo de composição (ou sudo
ao comando docker run
), para descartar qualquer problema de permissão.
Você pode usar dockur/macos para isso. Ele compartilha muitos dos mesmos recursos, exceto a instalação automática.
Sim, este projeto contém apenas código-fonte aberto e não distribui nenhum material protegido por direitos autorais. Quaisquer chaves de produto encontradas no código são apenas espaços reservados genéricos fornecidos pela Microsoft para fins de avaliação. Portanto, de acordo com todas as leis aplicáveis, este projeto será considerado legal.
Os nomes de produtos, logotipos, marcas e outras marcas registradas mencionadas neste projeto são de propriedade de seus respectivos detentores de marcas registradas. Este projeto não é afiliado, patrocinado ou endossado pela Microsoft Corporation.