Windows внутри контейнера Docker.
Через Docker создайте:
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
Через Docker CLI:
docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows
Через Кубернетес:
kubectl apply -f kubernetes.yml
Очень просто! Вот шаги:
Запустите контейнер и подключитесь к порту 8006 с помощью веб-браузера.
Устройтесь поудобнее и расслабьтесь, пока происходит волшебство: вся установка будет выполнена полностью автоматически.
Как только вы увидите рабочий стол, ваша установка Windows готова к использованию.
Наслаждайтесь своей новой машиной и не забудьте поставить звездочку в этом репозитории!
По умолчанию будет установлена Windows 11. Но вы можете добавить переменную среды VERSION
в файл создания, чтобы указать альтернативную версию Windows для загрузки:
environment :
VERSION : " 11 "
Выберите одно из значений ниже:
Ценить | Версия | Размер |
---|---|---|
11 | Windows 11 Профессиональная | 5,4 ГБ |
11l | Windows 11 ЛТСК | 4,2 ГБ |
11e | Windows 11 Корпоративная | 5,8 ГБ |
10 | Windows 10 Профессиональная | 5,7 ГБ |
10l | Windows 10 ЛТСК | 4,6 ГБ |
10e | Windows 10 Корпоративная | 5,2 ГБ |
8 | Windows 8.1 Профессиональная | 4,0 ГБ |
8e | Windows 8.1 Корпоративная | 3,7 ГБ |
7e | Windows 7 Корпоративная | 3,0 ГБ |
ve | Windows Vista Корпоративная | 3,0 ГБ |
xp | Windows XP Профессиональная | 0,6 ГБ |
2025 | Windows Сервер 2025 | 5,0 ГБ |
2022 | Windows Сервер 2022 | 4,7 ГБ |
2019 | Windows Сервер 2019 | 5,3 ГБ |
2016 | Windows Сервер 2016 | 6,5 ГБ |
2012 | Windows Сервер 2012 | 4,3 ГБ |
2008 | Windows Сервер 2008 | 3,0 ГБ |
2003 | Windows Сервер 2003 | 0,6 ГБ |
Кончик
Для установки версий Windows ARM64 используйте docur/windows-arm.
Чтобы изменить место хранения, включите следующую привязку в файл компоновки:
volumes :
- /var/win:/storage
Замените примерный путь /var/win
на нужную папку хранения.
Чтобы увеличить размер по умолчанию (64 ГБ), добавьте параметр DISK_SIZE
в файл создания и установите для него желаемую емкость:
environment :
DISK_SIZE : " 256G "
Кончик
Это также можно использовать для изменения размера существующего диска до большей емкости без потери данных.
Откройте «Проводник» и щелкните раздел «Сеть», вы увидите компьютер с именем host.lan
. Дважды щелкните по нему, и появится папка с именем Data
, которую можно привязать к любой папке на вашем хосте с помощью файла компоновки:
volumes :
- /home/user/example:/data
Папка примера /home/user/example
будет доступна как \host.lanData
.
Кончик
Вы можете сопоставить этот путь с буквой диска в Windows для облегчения доступа.
Чтобы загрузить неподдерживаемый образ ISO, который нельзя выбрать из списка выше, укажите URL-адрес этого ISO в переменной среды VERSION
, например:
environment :
VERSION : " https://example.com/win.iso "
Альтернативно, вы также можете пропустить загрузку и вместо этого использовать локальный файл, привязав его к файлу создания следующим образом:
volumes :
- /home/user/example.iso:/custom.iso
Замените путь примера /home/user/example.iso
именем нужного файла ISO, значение VERSION
в этом случае будет игнорироваться.
Чтобы запустить собственный сценарий после установки, вы можете создать файл с именем install.bat
и поместить его в папку вместе со всеми необходимыми дополнительными файлами (например, с программным обеспечением, которое необходимо установить). Затем привяжите эту папку к файлу создания следующим образом:
volumes :
- /home/user/example:/oem
Папка примера /home/user/example
будет скопирована в C:OEM
во время установки, а содержащий ее файл install.bat
будет выполнен на последнем этапе.
Лучше всего придерживаться автоматической установки, поскольку она настраивает различные параметры для предотвращения распространенных проблем при запуске Windows в виртуальной среде.
Однако, если вы настаиваете на выполнении установки вручную, добавьте в файл создания файла следующую переменную среды:
environment :
MANUAL : " Y "
По умолчанию контейнеру будет разрешено использовать максимум 2 ядра ЦП и 4 ГБ ОЗУ.
Если вы хотите изменить это, вы можете указать желаемую сумму, используя следующие переменные среды:
environment :
RAM_SIZE : " 8G "
CPU_CORES : " 4 "
По умолчанию во время установки создается пользователь Docker
с пустым паролем.
Если вы хотите использовать другие учетные данные, вы можете изменить их в файле создания:
environment :
USERNAME : " bill "
PASSWORD : " gates "
По умолчанию будет загружена английская версия Windows. Но вы можете добавить переменную среды LANGUAGE
в файл компоновки, чтобы указать альтернативный язык:
environment :
LANGUAGE : " French "
Вы можете выбрать между: ?? арабский, ?? Болгарка, ?? Китайский, ?? Хорватский, ?? Чех, ?? Датский, ?? Голландский, ?? Английский, ?? Эстонский, ?? Финский, ?? Французский, ?? Немецкий, ?? Греческий, ?? Иврит, ?? Венгерский, ?? Итальянский, ?? японец, ?? Корейский, ?? Латышский, ?? Литовский, ?? Норвежец, ?? Польский, ?? Португальский, ?? Румынский, ?? Русский, ?? Сербский, ?? Словацкий, ?? Словенский, ?? Испанский, ?? Шведский, ?? Тайский, ?? Турецкий и ?? Украинский.
Если вы хотите использовать раскладку клавиатуры или языковой стандарт, которые не используются по умолчанию для выбранного вами языка, вы можете добавить переменные KEYBOARD
и REGION
с кодом культуры, например:
environment :
REGION : " en-US "
KEYBOARD : " en-US "
Примечание
Изменение этих значений не будет иметь никакого эффекта после завершения установки. В этом случае используйте панель управления внутри Windows.
Веб-просмотрщик в основном предназначен для использования во время установки, так как качество изображения у него низкое, а также нет звука или буфера обмена.
Поэтому для удобства вы можете подключиться с помощью любого клиента Microsoft Remote Desktop к IP-адресу контейнера, используя имя пользователя Docker
и оставив пароль пустым.
Существует клиент RDP для Android, доступный в Play Store, и клиент для iOS в Apple Store. Для Linux вы можете использовать FreeRDP, а в Windows просто введите mstsc
в поле поиска.
По умолчанию контейнер использует мостовую сеть, которая использует общий IP-адрес с хостом.
Если вы хотите назначить контейнеру индивидуальный IP-адрес, вы можете создать сеть macvlan следующим образом:
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
Обязательно измените эти значения в соответствии с вашей локальной подсетью.
После создания сети измените файл Compose, чтобы он выглядел следующим образом:
services :
windows :
container_name : windows
....
networks :
vlan :
ipv4_address : 192.168.0.100
networks :
vlan :
external : true
Дополнительным преимуществом этого подхода является то, что вам больше не придется выполнять сопоставление портов, поскольку все порты будут открыты по умолчанию.
Важный
Этот IP-адрес не будет доступен с хоста Docker из-за конструкции macvlan, которая не позволяет осуществлять связь между ними. Если это вызывает беспокойство, в качестве обходного пути вам необходимо создать второй macvlan.
После настройки контейнера для macvlan Windows может стать частью вашей домашней сети, запросив IP-адрес у вашего маршрутизатора, как настоящий ПК.
Чтобы включить этот режим, добавьте в файл Compose следующие строки:
environment :
DHCP : " Y "
devices :
- /dev/vhost-net
device_cgroup_rules :
- ' c *:* rwm '
Примечание
В этом режиме контейнер и Windows будут иметь свои отдельные IP-адреса.
Чтобы создать дополнительные диски, измените файл компоновки следующим образом:
environment :
DISK2_SIZE : " 32G "
DISK3_SIZE : " 64G "
volumes :
- /home/example:/storage2
- /mnt/data/example:/storage3
Дисковые устройства можно передавать напрямую, добавляя их в файл компоновки следующим образом:
devices :
- /dev/sdb:/disk1
- /dev/sdc:/disk2
Используйте /disk1
если вы хотите, чтобы он стал вашим основным диском (который будет отформатирован во время установки), и используйте /disk2
и выше, чтобы добавить их в качестве дополнительных дисков (которые останутся нетронутыми).
Чтобы передать USB-устройство, сначала найдите его поставщика и идентификатор продукта с помощью команды lsusb
, а затем добавьте их в свой файл компоновки следующим образом:
environment :
ARGUMENTS : " -device usb-host,vendorid=0x1234,productid=0x1234 "
devices :
- /dev/bus/usb
Важный
Если устройство представляет собой USB-накопитель, подождите, пока установка не завершится, прежде чем подключать его. В противном случае установка может завершиться неудачей, так как порядок дисков может измениться.
Только Linux и Windows 11 поддерживают виртуализацию KVM, macOS и Windows 10, к сожалению, нет.
Вы можете запустить следующие команды в Linux, чтобы проверить вашу систему:
sudo apt install cpu-checker
sudo kvm-ok
Если вы получили сообщение об ошибке от kvm-ok
, указывающее, что KVM невозможно использовать, проверьте:
расширения виртуализации ( Intel VT-x
или AMD SVM
) включены в вашем BIOS.
вы включили «вложенную виртуализацию», если запускаете контейнер внутри виртуальной машины.
вы не используете облачного провайдера, поскольку большинство из них не допускают вложенную виртуализацию для своих VPS.
Если вы не получаете никаких ошибок от kvm-ok
, но контейнер по-прежнему жалуется на KVM, проверьте:
вы не используете «Docker Desktop для Linux», поскольку он не поддерживает KVM, вместо этого используйте напрямую Docker Engine.
это может помочь добавить privileged: true
в ваш файл создания (или sudo
в команду docker run
), чтобы исключить любые проблемы с разрешениями.
Для этого вы можете использовать docur/macos. Он имеет многие из тех же функций, за исключением автоматической установки.
Да, этот проект содержит только открытый исходный код и не распространяет материалы, защищенные авторским правом. Любые ключи продуктов, найденные в коде, представляют собой просто общие заполнители, предоставленные Microsoft для пробных целей. Так что по всем действующим законам этот проект будет считаться законным.
Названия продуктов, логотипы, бренды и другие товарные знаки, упомянутые в этом проекте, являются собственностью соответствующих владельцев товарных знаков. Этот проект не связан, не спонсируется и не поддерживается корпорацией Microsoft.