Discover an innovative and efficient method of deploying Windows OS (x64) on your linux system using the power of Vagrant VM, libvirt, and docker-compose. Together, these technologies help you containerize Windows OS, enabling you to manage a Windows instance just as you would any Docker container. This seamless integration into existing workflows significantly enhances convenience and optimizes resource allocation.
⭐ Don't forget to star the project if it helped you!
Ensure your system meets the following requirements:
-
Docker: Version 20 or higher (Install Docker)
-
Host OS: Linux
-
Virtualization Enabled:
- Check with:
grep -E -o 'vmx|svm' /proc/cpuinfo
- Output indicates:
vmx
→ Intel VT-x is supported & enabled.svm
→ AMD-V is supported & enabled.
- If virtualization is not enabled, enable it in the BIOS/UEFI settings.
- Check with:
- Create/Update the environmental file
.env
# Vagrant image settings
MEMORY=8000 # 8GB
CPU=4
DISK_SIZE=100
- Create
docker-compose.yml
services:
win10:
image: docker.io/vaggeliskls/windows-in-docker-container:latest
platform: linux/amd64
env_file: .env
stdin_open: true
tty: true
privileged: true
cgroup: host
restart: always
ports:
- 3389:3389
- 2222:2222
- Create
docker-compose.override.yml
when you want your VM to be persistent
services:
win10:
volumes:
- libvirt_data:/var/lib/libvirt
- vagrant_data:/root/.vagrant.d
- vagrant_project:/app/.vagrant
- libvirt_config:/etc/libvirt
volumes:
libvirt_data:
name: libvirt_data
vagrant_data:
name: vagrant_data
vagrant_project:
name: vagrant_project
libvirt_config:
name: libvirt_config
- Run:
docker compose up -d
When you want to destroy everything
docker compose down -v
For debugging or testing, you can connect to the VM using Remote Desktop on port 3389
.
OS | Software |
---|---|
Linux | rdesktop → rdesktop <ip>:3389 or Remmina |
MacOS | Microsoft Remote Desktop |
Windows | Built-in Remote Desktop Connection |
You can connect via SSH using either the administrator or Vagrant user credentials.
ssh <user>@<host> -p 2222
Default users based on the Vagrant image are:
- Administrator
- Username: Administrator
- Password: vagrant
- User
- Username: vagrant
- Password: vagrant