Skip to content

Deploy and manage a Windows OS (x64) seamlessly using Vagrant VM, libvirt, and docker-compose. This innovative approach integrates smoothly into existing workflows, providing an efficient way of containerizing Windows OS for better resource allocation and convenience.

License

Notifications You must be signed in to change notification settings

vaggeliskls/windows-in-docker-container

Repository files navigation

💻 Windows in Docker Container

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!

📋 Prerequisites

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.

🚀 Deployment Guide

  1. Create/Update the environmental file .env
# Vagrant image settings
MEMORY=8000 # 8GB
CPU=4
DISK_SIZE=100
  1. 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
  1. 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
  1. Run: docker compose up -d

When you want to destroy everything docker compose down -v

windows screenshot

🌐 Access

Remote Desktop (RDP)

For debugging or testing, you can connect to the VM using Remote Desktop on port 3389.

Software for Remote Desktop Access

OS Software
Linux rdesktoprdesktop <ip>:3389 or Remmina
MacOS Microsoft Remote Desktop
Windows Built-in Remote Desktop Connection

SSH

You can connect via SSH using either the administrator or Vagrant user credentials.

ssh <user>@<host> -p 2222

🔑 User Login

Default users based on the Vagrant image are:

  1. Administrator
    • Username: Administrator
    • Password: vagrant
  2. User
    • Username: vagrant
    • Password: vagrant

📚 Further Reading and Resources

About

Deploy and manage a Windows OS (x64) seamlessly using Vagrant VM, libvirt, and docker-compose. This innovative approach integrates smoothly into existing workflows, providing an efficient way of containerizing Windows OS for better resource allocation and convenience.

Topics

Resources

License

Stars

Watchers

Forks

Packages