feat: Add winctl.sh management script and multi-version setup

Add winctl.sh with 12 commands for managing Windows Docker containers:
- start, stop, restart, status, logs, shell, stats
- build, rebuild, list, inspect, monitor, check
- Interactive menus, prerequisites checking, color output
- Support for 22 Windows versions across 4 categories

Multi-version compose structure:
- Split base.yml into base-modern.yml (8G) and base-legacy.yml (2G)
- Add .env.example for configuration
- Update all compose files to use env_file
- Add unique port mappings per version
- Update README with winctl.sh documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Michel Abboud 2026-01-28 23:14:45 +00:00
parent c1d3f8e886
commit effdbe0f6f
25 changed files with 1332 additions and 58 deletions

23
compose/base-legacy.yml Normal file
View file

@ -0,0 +1,23 @@
x-legacy: &legacy
image: dockurr/windows
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
restart: unless-stopped
stop_grace_period: 2m
environment:
RAM_SIZE: ${LEGACY_RAM_SIZE:-2G}
CPU_CORES: ${LEGACY_CPU_CORES:-2}
DISK_SIZE: ${LEGACY_DISK_SIZE:-32G}
USERNAME: ${USERNAME:-Docker}
PASSWORD: ${PASSWORD:-admin}
LANGUAGE: ${LANGUAGE:-en}
REGION: ${REGION:-en-US}
KEYBOARD: ${KEYBOARD:-en-US}
WIDTH: ${WIDTH:-1280}
HEIGHT: ${HEIGHT:-720}
DHCP: ${DHCP:-N}
SAMBA: ${SAMBA:-Y}
DEBUG: ${DEBUG:-N}

23
compose/base-modern.yml Normal file
View file

@ -0,0 +1,23 @@
x-modern: &modern
image: dockurr/windows
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
restart: unless-stopped
stop_grace_period: 2m
environment:
RAM_SIZE: ${MODERN_RAM_SIZE:-8G}
CPU_CORES: ${MODERN_CPU_CORES:-4}
DISK_SIZE: ${MODERN_DISK_SIZE:-128G}
USERNAME: ${USERNAME:-Docker}
PASSWORD: ${PASSWORD:-admin}
LANGUAGE: ${LANGUAGE:-en}
REGION: ${REGION:-en-US}
KEYBOARD: ${KEYBOARD:-en-US}
WIDTH: ${WIDTH:-1280}
HEIGHT: ${HEIGHT:-720}
DHCP: ${DHCP:-N}
SAMBA: ${SAMBA:-Y}
DEBUG: ${DEBUG:-N}

View file

@ -1,9 +0,0 @@
x-common: &common
image: dockurr/windows
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
restart: unless-stopped
stop_grace_period: 2m

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-modern.yml
services:
win10:
<<: *common
<<: *modern
container_name: win10
env_file: ../../.env
environment:
VERSION: "10"
ports:
@ -15,8 +16,9 @@ services:
- ../../data/win10:/storage
win10e:
<<: *common
<<: *modern
container_name: win10e
env_file: ../../.env
environment:
VERSION: "10e"
ports:
@ -27,8 +29,9 @@ services:
- ../../data/win10e:/storage
win10l:
<<: *common
<<: *modern
container_name: win10l
env_file: ../../.env
environment:
VERSION: "10l"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-modern.yml
services:
win11:
<<: *common
<<: *modern
container_name: win11
env_file: ../../.env
environment:
VERSION: "11"
ports:
@ -15,8 +16,9 @@ services:
- ../../data/win11:/storage
win11e:
<<: *common
<<: *modern
container_name: win11e
env_file: ../../.env
environment:
VERSION: "11e"
ports:
@ -27,8 +29,9 @@ services:
- ../../data/win11e:/storage
win11l:
<<: *common
<<: *modern
container_name: win11l
env_file: ../../.env
environment:
VERSION: "11l"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-legacy.yml
services:
win7:
<<: *common
<<: *legacy
container_name: win7
env_file: ../../.env
environment:
VERSION: "7u"
ports:
@ -15,8 +16,9 @@ services:
- ../../data/win7:/storage
win7e:
<<: *common
<<: *legacy
container_name: win7e
env_file: ../../.env
environment:
VERSION: "7e"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-legacy.yml
services:
win81:
<<: *common
<<: *legacy
container_name: win81
env_file: ../../.env
environment:
VERSION: "8"
ports:
@ -15,8 +16,9 @@ services:
- ../../data/win81:/storage
win81e:
<<: *common
<<: *legacy
container_name: win81e
env_file: ../../.env
environment:
VERSION: "8e"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-legacy.yml
services:
vista:
<<: *common
<<: *legacy
container_name: vista
env_file: ../../.env
environment:
VERSION: "vu"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-legacy.yml
services:
win2k:
<<: *common
<<: *legacy
container_name: win2k
env_file: ../../.env
environment:
VERSION: "2k"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-legacy.yml
services:
winxp:
<<: *common
<<: *legacy
container_name: winxp
env_file: ../../.env
environment:
VERSION: "xp"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-legacy.yml
services:
win2003:
<<: *common
<<: *legacy
container_name: win2003
env_file: ../../.env
environment:
VERSION: "2003"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-legacy.yml
services:
win2008:
<<: *common
<<: *legacy
container_name: win2008
env_file: ../../.env
environment:
VERSION: "2008"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-legacy.yml
services:
win2012:
<<: *common
<<: *legacy
container_name: win2012
env_file: ../../.env
environment:
VERSION: "2012"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-modern.yml
services:
win2016:
<<: *common
<<: *modern
container_name: win2016
env_file: ../../.env
environment:
VERSION: "2016"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-modern.yml
services:
win2019:
<<: *common
<<: *modern
container_name: win2019
env_file: ../../.env
environment:
VERSION: "2019"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-modern.yml
services:
win2022:
<<: *common
<<: *modern
container_name: win2022
env_file: ../../.env
environment:
VERSION: "2022"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-modern.yml
services:
win2025:
<<: *common
<<: *modern
container_name: win2025
env_file: ../../.env
environment:
VERSION: "2025"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-legacy.yml
services:
tiny10:
<<: *common
<<: *legacy
container_name: tiny10
env_file: ../../.env
environment:
VERSION: "tiny10"
ports:

View file

@ -1,10 +1,11 @@
include:
- ../base.yml
- ../base-legacy.yml
services:
tiny11:
<<: *common
<<: *legacy
container_name: tiny11
env_file: ../../.env
environment:
VERSION: "tiny11"
ports: