Как установить windows в контейнер

Windows inside a Docker container.

Features ✨

  • ISO downloader
  • KVM acceleration
  • Web-based viewer

Video 📺

Youtube

Usage 🐳

Via Docker Compose:

services:
  windows:
    image: dockurr/windows
    container_name: windows
    environment:
      VERSION: "11"
    devices:
      - /dev/kvm
      - /dev/net/tun
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
      - 3389:3389/tcp
      - 3389:3389/udp
    volumes:
      - ./windows:/storage
    restart: always
    stop_grace_period: 2m
Via Docker CLI:

docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 dockurr/windows
Via Kubernetes:

kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml
Via Github Codespaces:

FAQ 💬

How do I use it?

Very simple! These are the steps:

  • Start the container and connect to port 8006 using your web browser.

  • Sit back and relax while the magic happens, the whole installation will be performed fully automatic.

  • Once you see the desktop, your Windows installation is ready for use.

Enjoy your brand new machine, and don’t forget to star this repo!

How do I select the Windows version?

By default, Windows 11 Pro will be installed. But you can add the VERSION environment variable to your compose file, in order to specify an alternative Windows version to be downloaded:

environment:
  VERSION: "11"

Select from the values below:

Value Version Size
11 Windows 11 Pro 5.4 GB
11l Windows 11 LTSC 4.7 GB
11e Windows 11 Enterprise 4.0 GB
10 Windows 10 Pro 5.7 GB
10l Windows 10 LTSC 4.6 GB
10e Windows 10 Enterprise 5.2 GB
8e Windows 8.1 Enterprise 3.7 GB
7u Windows 7 Ultimate 3.1 GB
vu Windows Vista Ultimate 3.0 GB
xp Windows XP Professional 0.6 GB
2k Windows 2000 Professional 0.4 GB
2025 Windows Server 2025 5.6 GB
2022 Windows Server 2022 4.7 GB
2019 Windows Server 2019 5.3 GB
2016 Windows Server 2016 6.5 GB
2012 Windows Server 2012 4.3 GB
2008 Windows Server 2008 3.0 GB
2003 Windows Server 2003 0.6 GB

How do I change the storage location?

To change the storage location, include the following bind mount in your compose file:

volumes:
  - ./windows:/storage

Replace the example path ./windows with the desired storage folder or named volume.

How do I change the size of the disk?

To expand the default size of 64 GB, add the DISK_SIZE setting to your compose file and set it to your preferred capacity:

environment:
  DISK_SIZE: "256G"

Tip

This can also be used to resize the existing disk to a larger capacity without any data loss.

How do I share files with the host?

Open ‘File Explorer’ and click on the ‘Network’ section, you will see a computer called host.lan.

Double-click it and it will show a folder called Data, which can be bound to any folder on your host via the compose file:

volumes:
  -  ./example:/data

The example folder ./example will be available as \\host.lan\Data.

Tip

You can map this path to a drive letter in Windows, for easier access.

How do I change the amount of CPU or RAM?

By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM.

If you want to adjust this, you can specify the desired amount using the following environment variables:

environment:
  RAM_SIZE: "8G"
  CPU_CORES: "4"

How do I configure the username and password?

By default, a user called Docker is created during installation and its password is admin.

If you want to use different credentials, you can configure them in your compose file (only before installation):

environment:
  USERNAME: "bill"
  PASSWORD: "gates"

How do I select the Windows language?

By default, the English version of Windows will be downloaded.

But before installation you can add the LANGUAGE environment variable to your compose file, in order to specify an alternative language:

environment:
  LANGUAGE: "French"

You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estonian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian.

How do I select the keyboard layout?

If you want to use a keyboard layout or locale that is not the default for your selected language, you can add KEYBOARD and REGION variables like this (before installation):

environment:
  REGION: "en-US"
  KEYBOARD: "en-US"

How do I select the edition?

Windows Server offers a minimalistic Core edition without a GUI. To select those non-standard editions, you can add a EDITION variable like this (before installation):

environment:
  EDITION: "core"

How do I install a custom image?

In order to download an unsupported ISO image, specify its URL in the VERSION environment variable:

environment:
  VERSION: "https://example.com/win.iso"

Alternatively, you can also skip the download and use a local file instead, by binding it in your compose file in this way:

volumes:
  - ./example.iso:/boot.iso

Replace the example path ./example.iso with the filename of your desired ISO file. The value of VERSION will be ignored in this case.

How do I run a script after installation?

To run your own script after installation, you can create a file called install.bat and place it in a folder together with any additional files it needs (software to be installed for example).

Then bind that folder in your compose file like this:

volumes:
  -  ./example:/oem

The example folder ./example will be copied to C:\OEM and the containing install.bat will be executed during the last step of the automatic installation.

How do I perform a manual installation?

It’s recommended to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment.

However, if you insist on performing the installation manually at your own risk, add the following environment variable to your compose file:

How do I connect using RDP?

The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example.

So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username Docker and password admin.

There is a RDP client for Android available from the Play Store and one for iOS in the Apple Store. For Linux you can use FreeRDP and on Windows just type mstsc in the search box.

How do I assign an individual IP address to the container?

By default, the container uses bridge networking, which shares the IP address with the host.

If you want to assign an individual IP address to the container, you can create a macvlan network as follows:

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

Be sure to modify these values to match your local subnet.

Once you have created the network, change your compose file to look as follows:

services:
  windows:
    container_name: windows
    ..<snip>..
    networks:
      vlan:
        ipv4_address: 192.168.0.100

networks:
  vlan:
    external: true

An added benefit of this approach is that you won’t have to perform any port mapping anymore, since all ports will be exposed by default.

Important

This IP address won’t be accessible from the Docker host due to the design of macvlan, which doesn’t permit communication between the two. If this is a concern, you need to create a second macvlan as a workaround.

How can Windows acquire an IP address from my router?

After configuring the container for macvlan, it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC.

To enable this mode, in which the container and Windows will have separate IP addresses, add the following lines to your compose file:

environment:
  DHCP: "Y"
devices:
  - /dev/vhost-net
device_cgroup_rules:
  - 'c *:* rwm'

How do I add multiple disks?

To create additional disks, modify your compose file like this:

environment:
  DISK2_SIZE: "32G"
  DISK3_SIZE: "64G"
volumes:
  - ./example2:/storage2
  - ./example3:/storage3

How do I pass-through a disk?

It is possible to pass-through disk devices or partitions directly by adding them to your compose file in this way:

devices:
  - /dev/sdb:/disk1
  - /dev/sdc1:/disk2

Use /disk1 if you want it to become your main drive (which will be formatted during installation), and use /disk2 and higher to add them as secondary drives (which will stay untouched).

How do I pass-through a USB device?

To pass-through a USB device, first lookup its vendor and product id via the lsusb command, then add them to your compose file like this:

environment:
  ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
  - /dev/bus/usb

If the device is a USB disk drive, please wait until after the installation is fully completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged.

How do I verify if my system supports KVM?

First check if your software is compatible using this chart:

Product Linux Win11 Win10 macOS
Docker CLI
Docker Desktop
Podman CLI
Podman Desktop

After that you can run the following commands in Linux to check your system:

sudo apt install cpu-checker
sudo kvm-ok

If you receive an error from kvm-ok indicating that KVM cannot be used, please check whether:

  • the virtualization extensions (Intel VT-x or AMD SVM) are enabled in your BIOS.

  • you enabled «nested virtualization» if you are running the container inside a virtual machine.

  • you are not using a cloud provider, as most of them do not allow nested virtualization for their VPS’s.

If you did not receive any error from kvm-ok but the container still complains about a missing KVM device, it could help to add privileged: true to your compose file (or sudo to your docker command) to rule out any permission issue.

How do I run macOS in a container?

You can use dockur/macos for that. It shares many of the same features, except for the automatic installation.

How do I run a Linux desktop in a container?

You can use qemus/qemu in that case.

Is this project legal?

Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal.

Stars 🌟

Stars

Disclaimer ⚖️

The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation.

Уровень сложностиСредний

Время на прочтение6 мин

Количество просмотров10K

Если на компьютере под Linux нужно быстренько запустить Windows или MacOS, самый простой и быстрый способ сделать это — ввести команду для скачивания и загрузки докер-контейнера с этой ОС.

В маркетплейсе RuVDS много готовых образов с установленными операционными системами. Там разные дистрибутивы Linux, Windows Server и CentOS. Но нет контейнеров с операционными системами.

Операционная система в докер-контейнере (в QEMU) не требует ручной инсталляции ОС. Всего одна команда в консоли — и контейнер Windows скачивается и запускается.

Набор контейнеров Dockur

Хороший набор докер-контейнеров с готовыми образами операционных систем в виртуальных машинах QEMU можно найти в репозитории Dockur.

Для выбора версии Windows при установке контейнера нужно изменить соответствующее значение в переменной окружения конфигурационного файла:

environment:
  VERSION: "11"

В наличии следующие контейнеры Windows:

Предупреждение. Windows 8 потребляет очень много ресурсов CPU и RAM.

Есть также контейнеры MacOS, тут выбор поменьше:

Запуск через Docker Compose:

services:
  macos:
    image: dockurr/macos
    container_name: macos
    environment:
      VERSION: "13"
    devices:
      - /dev/kvm
      - /dev/net/tun
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
      - 5900:5900/tcp
      - 5900:5900/udp
    volumes:
      - ./macos:/storage
    restart: always
    stop_grace_period: 2m

Из консоли:

docker run -it --rm --name macos -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/macos:/storage --stop-timeout 120 dockurr/macos

Для выбора версии тоже следует изменить значение в переменной окружения конфигурационного файла:

environment:
  VERSION: "13"

Версии MacOS перечислены в таблице выше.

Запуск контейнера Windows на сервере

Установить контейнер можно через Docker Compose, вот файл compose.yaml, который практически идентичен файлу для MacOS:

services:
  windows:
    image: dockurr/windows
    container_name: windows
    environment:
      VERSION: "11"
    devices:
      - /dev/kvm
      - /dev/net/tun
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
      - 3389:3389/tcp
      - 3389:3389/udp
    volumes:
      - ./windows:/storage
    restart: always
    stop_grace_period: 2m

Или из командной строки:

docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows

По умолчанию устанавливается Windows 11 Pro, другие версии можно указать, изменив параметр переменной окружения, как написано выше.

Дальнейший процесс полностью автоматический, нужно дождаться, пока контейнер скачается и запустится. Docker будет доступен через браузер на порту 8006.

Если зайти по нашему IP-адресу и указанному порту, мы увидим процесс скачивания ISO-образа Windows с сервера Microsoft:

Потом автоматическая установка и настройка Windows:

Это специальная версия Windows for Docker, она свободно распространяется с сайта Microsoft и требует активации для полноценной работы. Более старые версии Windows работают 30 дней без активации.

После завершения процесса в браузере откроется рабочий стол Windows:

Через браузер у нас работает система удалённого доступа к рабочему столу VNC (Virtual Network Computing), которая заметно подтормаживает, не поддерживает передачу звука и некоторых других функций. Для максимального комфорта рекомендуется настроить удалённый доступ через RDP. Собственно, этот доступ уже настроен в вышеуказанном файле compose.yaml, в котором присутствуют такие строки:

- 3389:3389/tcp
- 3389:3389/udp

По этим портам и осуществляется удалённый доступ к системе из RDP-клиента, такого как Microsoft Remote Desktop, можно на той же физической системе.

В командной строке для запуска контейнера мы видим параметр --device=/dev/kvm. Это указывает на использование виртуальной машины KVM (Kernel-based Virtual Machine), опенсорсной технологии виртуализации, встроенной в Linux. В частности, KVM позволяет превратить Linux в гипервизор для запуска нескольких изолированных виртуальных окружений, то есть виртуальных машин.

KVM — это часть Linux с 2006 года (с версии ядра 2.6.20), то есть в данном случае мы работаем с нативной виртуальной машиной Linux. Чтобы это стало возможным, материнская плата должна поддерживать технологию виртуализации на аппаратном уровне:

Чтобы проверить наличие поддержки KVM на сервере под Linux, можно запустить следующую команду:

sudo apt install cpu-checker
sudo kvm-ok

Если kvm-ok выдаёт ошибку, то нужно проверить, что:

  • в BIOS включены соответствующие расширения виртуализации (Intel VT-x, VT-d или AMD SVM),
  • включена «вложенная виртуализация», если контейнер запускается внутри виртуальной машины.

К сожалению, большинство облачных провайдеров не разрешают вложенную виртуализацию на своих VPS:

Поэтому Windows в докер-контейнере запустится только на выделенном сервере или на домашнем сервере/ПК.

Если kvm-ok не выдаёт никакой ошибки, но контейнер всё равно сообщает об отсутствии KVM-устройства, причиной может быть проблема с правами, в качестве решения можно добавить параметр privileged: true в файл compose (или sudo в команду docker).

KVM обеспечивает виртуальной машине доступ к USB-устройствам и другим аппаратным ресурсам. Он позволит даже редактировать BIOS, как в примере выше.

По умолчанию, контейнеру Windows выделяется два ядра CPU и 4 ГБ RAM, это минимальные требования для запуска Windows 11. Чтобы изменить объём выделяемых ресурсов, следует добавить следующие строчки в конфигурационный файл:

environment:
  RAM_SIZE: "8G"
  CPU_CORES: "4"

Увеличение объёма дискового пространства со стандартных 64 ГБ (по умолчанию) до 100 ГБ:

environment:
  DISK_SIZE: "100G"

Виртуальная машина будет занимать столько места на диске, сколько реально занимает контейнер с файлами, а не максимальное указанное значение.

Добавить несколько дисков:

environment:
  DISK2_SIZE: "32G"
  DISK3_SIZE: "64G"
volumes:
  - ./example2:/storage2
  - ./example3:/storage3

Зачем это нужно

Распространённая причина запуска Windows в контейнере — если у нас чисто линуксовое (или яблочное) окружение, вокруг нет ни одного компьютера под Windows, но срочно понадобилось запустить какую-то специфическую программу, которая работает только под Windows. В окружении виртуализации типа Wine эта программа не полностью функциональна. Например, старая утилита для редактирования BIOS (как AMIBCP на скриншоте) запускается под Wine, но не даёт реально изменять значения BIOS, то есть не сохраняет образ ROM:

Конечно, можно установить на ПК мультизагрузчик и вторую ОС или запустить виртуальную машину, но это тоже непростой и многоступенчатый процесс: сконфигурировать гипервизор, выделить аппаратные ресурсы.

Копия Windows в контейнере — самый простой и быстрый способ, если срочно нужна эта ОС. И самое удобное то, что не нужно проходить через процесс инсталляции системы вручную, потому что она устанавливается автоматически и сразу готова к работе. Вся процедура скачивания и запуска контейнера занимает несколько минут.

Другие наборы контейнеров

Кроме перечисленных выше, в репозитории Dockur есть и другие наборы докер-контейнеров, а также программы, полезные для самохостинга:

  • Windows для ARM64,
  • сервер Samba SMB,
  • Dnsmasq,
  • strfry, рилей-сервер Nostr,
  • casa, операционная система CasaOS для самохостинга (личное облако или домашний дата-центр),

  • statping — страничка с красивыми графиками, аналитикой и плагинами, всё для мониторинга сайтов и приложений,
  • lemmy — агрегатор ссылок и форум, аналог Reddit или Hacker News, только для децентрализованной сети будущего, где у каждого пользователя свой сервер.

Windows на виртуальном сервере

Хотя KVM не работает на VPS, в маркетплейсе RUVDS есть четыре образа с установленной системой Windows Server 2019 и специализированным программным обеспечением:

  • METATRADER 5 (MT5) – SERVER CORE с торговым терминалом MT5,
  • SQL EXPRESS – SERVER CORE c бесплатной редакцией SQL Server 2019 и SQL Server Management Studio 18.4. Максимальный размер БД в этой редакции ограничен 10 ГБ,
  • сервер Minecraft,
  • VPN L2TP — позволяет сразу после установки шаблона подключаться к серверу по VPN, целиком меняя IP-адрес подключившегося.

Если выбрать такой образ — мы получаем готовую лицензированную Windows и настроенный софт.

Кроме того, при ручной конфигурации сервера в конфигураторе есть возможность выбрать несколько версий серверной ОС Windows для установки:

  • Windows Server 2022.
  • Windows Server 2019.
  • Windows Server 2016.
  • Windows Server 2012 R2.
  • Windows Server Core 2022.

Есть и готовые тарифы с Windows:

Самая дешёвая Windows 2012 R2 стоит 588 руб. в месяц (470 руб. при оплате за год).

С 2023 года у российских пользователей возникли проблемы с покупкой Windows в условиях санкций. В такой ситуации выбор VPS с предустановленной Windows или докер-контейнер с официальным образом — легальный выход из ситуации.

Кстати, таким же удобным способом в Docker/QEMU можно запускать и Linux-контейнеры.

© 2025 ООО «МТ ФИНАНС»

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻

Содержание:


  • 1.

    Предыстория


  • 2.

    Windows контейнер


  • 3.

    В мире контейнеров Windows


  • 4.

    Связь с Docker


  • 5.

    Мир Windows

Начиная с Windows Server 2016 в операционной системе от Microsoft включена нативная поддержка контейнеров. Это не Linux контейнеры, это контейнеры, которые работают на Windows, и запускают Windows внутри себя.

Данный факт является результатом присоединения Microsoft к Open Container Initiative (OCI). Контейнеры в Windows позволяют запускать приложения, которые изолированы от остальной части системы в переносимых контейнерах. Эти контейнеры включают в себя все, чтобы ваше приложение было полностью функциональным. Так же как это произошло с Linux, Microsoft надеется, что контейнеры изменят характер поставки программного обеспечения для пользователей и в Windows.

Предыстория

Контейнеры являлись основой вычислений в Linux в течение целого ряда лет. Google, например, уже очень давно использует решения, основанные на контейнерах по всей своей империи, чтобы предоставлять распределенные приложения не только своим сотрудникам, но и своим пользователям по всему миру.

Тем не менее, Google не был долгое время одинок в своем увлечении контейнерными вычислениями. В какой-то момент из ниоткуда появился Docker, который в отличии от Google стандартизировал процессы доставки контейнеров, а также управления ими. Более того, Docker развивался сообществом энтузиастов в мире открытого исходного кода, что сделало его простым и очень популярным решением. С развитием проекта Docker буквально у каждого желающего появилась возможность получить скорость, гибкость и простоту управления программным обеспечением и инфраструктурой, которую предоставляют контейнеры.

Docker революция стала настолько значительной, что даже Microsoft присоединился к этой инициативе в первую очередь за счет поддержки Docker и Linux в Azure, а теперь и за счет интеграции этой технологии в Windows Server 2016. Самое интересное это то, что контейнеры Windows Server не основаны на Linux, это нечто совершенно новое. Windows контейнеры — это контейнеры, которые работают в Windows и запускают Windows внутри себя.

Причем Microsoft настолько серьезно стала относится к контейнерам, что сейчас активно участвует в Open Container Initiative (OCI), пытаясь перетягивать одеяло на себя так, как будто бы она сама придумала эту технологию.

Windows контейнер

Контейнер в Windows имеет много общего с его аналогом в Linux. Оба обеспечивают изолированную среду для запуска приложений. И там и там контейнеры используют передовые технологии изоляции для обеспечения портативной, но одновременно ограниченной среды, которая включает в себя практически все, чтобы приложение могло быть полностью функциональным.

Контейнер очень похож на виртуальную машину (ВМ) и часто рассматривается как отдельный тип виртуализации, но это два совершенно разные понятия. Да, каждый работает под управлением операционной системы (ОС), предоставляет внутри себя локальную файловую систему и может быть доступен по сети так же как физический компьютер. Тем не менее, при использовании ВМ вы имеете дело с полной и независимой ОС вместе с виртуальными драйверами устройств, управлением памятью и другими компонентами, которые добавляют к накладные расходы.

Контейнер переиспользует большее количество общих ресурсов хост-системы нежели виртуальная машина, а значит, он более легкий, быстрее разворачивается и проще масштабируется между различными датацентрами. Таким образом, контейнер может предложить более эффективный механизм для инкапсулирования приложения, обеспечивая ему при этом необходимые интерфейсы хост-системы — все из этого приводит к более эффективному использованию ресурсов и улучшению переносимости приложений.

Microsoft планирует предложить два типа контейнеров в Windows Server 2016: контейнер Windows Server и Hyper-V контейнер. Оба типа функционируют одинаковым образом, и могут быть созданы и управляются одинаково. Там, где они различаются — это в уровне изоляции, который каждый из них обеспечивает.

Контейнер Windows Server разделяет ядро с ОС работает на хост-машине, что означает, что все контейнеры, работающие на этой машине, разделяют одно и то же ядро. В то же время, каждый контейнер поддерживает свой собственный вид на операционную систему, реестр, файловую систему, IP-адреса и другие компоненты, сочетая это с изоляцией, предоставляемой каждому контейнеру при помощи процессов, пространства имен и технологий управления ресурсами.

Контейнер Windows Server хорошо подходит для ситуаций, в которых и основная ОС, и приложения в контейнерах лежат в пределах той же зоны доверия, например для приложений, которые охватывают несколько контейнеров или образуют общую службу. Тем не менее, контейнеры Windows Server обсуждаются в связи с их зависимостью от процесса обновления ОС хост-системы, который может осложнить обслуживание и препятствовать процессам. Например, патч примененный к хосту может сломать приложение, работающее в контейнере. Что еще более важно, в таких ситуациях, как многопользовательские среды, модель разделяемого ядра может раскрыть систему для уязвимостей приложений и кросс-контейнерных атак.

docker-windows.png

Hyper-V контейнер решает эти проблемы, предоставляя виртуальную машину, в которой нужно запустить контейнер Windows. При таком подходе контейнер больше не разделяет ядро хост-машины и не имеет зависимости от патчей ОС этой машины. Конечно, такой подход означает некоторую потерю скорости и эффективности упаковки, которые вы получаете с обычным контейнером в Windows Server, но взамен вы получаете более изолированную и безопасную среду.

Вне зависимости от типа контейнера, который вы используете, теперь у вас есть возможность использовать контейнеры с такими технологиями Windows как .NET или PowerShell, что не было возможно раньше. Контейнер для Windows предоставляет все необходимое для обеспечения работы приложения на любом компьютере под управлением Windows Server 2016, давая вам тот уровень переносимости, который был не доступен на протяжении большей части истории Windows. Вы можете создавать свои контейнеры локально, делать их доступными процессов для тестирования и контроля качества, а затем отправить их в команде, занимающейся продуктивом, без необходимости беспокоиться о сложных установках и конфигурациях на каждом шаге этого пути.

В мире контейнеров Windows

Ряд компонентов принимают участие в процессе создании и запуска контейнеров, начиная с хоста, на котором они должны работать. Хост может быть как физическим компьютером, так и ВМ с Windows 2016 Server. Единственное, что важно, чтобы была включена функция контейнеризации для Windows.

Вы можете разместить контейнеры на любой версии Windows: Server Full UI или же Core, которая устанавливается по умолчанию. Microsoft также представляет Nano издание для Windows Server 2016 — минимальную версию ОС, которая не включает в себя локальный графический пользовательский интерфейс или консоль.

Microsoft также добавила вложенную виртуализацию для Windows Server 2016, так что вы можете запустить Hyper-V контейнеры, если хостом является ВМ. Если вы планируете запускать такой тип контейнера, необходимо включить функцию Hyper-V на хост-ОС. Microsoft также добавляет поддержку контейнера для Windows 10, хотя только для Hyper-V контейнеров.

Как и с контейнерами Docker, вы разворачиваете контейнеры для Windows из образов. Каждый образ начинается с образа ОС контейнера — базового образа, включающего в себя операционную систему, которая будет работать внутри контейнера. В настоящее время Microsoft предоставляет два базовых образа: образ Server Core и образ Nano Server. Вы должны загрузить хотя бы один из этих образов ОС от Microsoft, прежде чем сможете развернуть контейнер.

Microsoft строго определяет, какие образы вы можете использовать с каким типом контейнера на основании хост-ОС, как описано в следующей таблице.

Хост-ОС

Контейнер Windows Server

Контейнер Hyper-V

Windows Server Full UI

Образ Server Core

Образ Nano Server

Windows Server Core

Образ Server Core

Образ Nano Server

Windows Server Nano

Образ Nano Server

Образ Nano Server

Windows 10

N/A

Образ Nano Server

Как вы можете видеть, Hyper-V контейнеры в настоящее время поддерживают только образ Nano сервера, но ваш выбор контейнеров Windows Server зависит от того, с какой версией Windows Server вы работаете.

Для этого типа контейнера, образ ОС должен также соответствовать хост-системы в отношении сборки и уровня обновления. Несоответствие может привести к непредсказуемому поведению как для контейнера, так и хоста. Это означает, что вы должны обновить образ базового контейнера ОС при обновлении ОС хоста. Это также означает, что вы не будете иметь возможность запускать Linux контейнер на Windows машине, или наоборот, и это также верно для Hyper-V контейнеров.

Образы обеспечивают высокую степень гибкости, когда речь идет о развертывании контейнеров. Вы можете создавать образы на основе существующего образа и обновлять новые образы так часто, как это необходимо. После этого вы можете развернуть один или несколько контейнеров из этого образа.

Например, предположим, что вы создаете образ, основанный на Server Core. В новый образ, вы устанавливаете приложение, которое в настоящее время находится в разработке вместе со всеми зависимостями этого приложения. Затем вы можете развернуть один или несколько контейнеров из этого образа. Каждый контейнер функционирует как песочница, которая включает все компоненты, необходимые для полной работоспособности приложения.

Образ может быть развернут так часто, как это необходимо, а также совместно использоваться любым количеством контейнеров. Вы создаете контейнеры по мере необходимости, а затем избавляетесь от них, когда вы с ними закончите. Но лучше всего то, что вы можете обновить и повторно развернуть образ в любое время, а затем создать из него новые контейнеры, которые содержат последние изменения.

Вам не нужно выбирать тип контейнера (Windows Server или Hyper-V) до тех пор, пока вы не будете готовы запустить фактический контейнер. Тип контейнера не имеет никакого отношения к тому, как вы собираете ваши образы. Образы хранятся в репозитории и доступны по запросу для разворачивания контейнеров, где и когда они необходимы, будь то контейнеры Windows Server или Hyper-V.

Связь с Docker

Помимо компании, Docker также является проектом с открытым кодом, которая облегчает процесс развертывания и управления контейнерами. Контейнеры Windows теперь являются частью этого проекта, и сообщество Docker интенсивно работает, чтобы полностью интегрировать контейнеры Windows в экосистему Docker. В рамках этой же инициативы Docker предлагает Docker Engine для Windows, и Docker Client для Windows.

Docker Engine обеспечивает функциональность, необходимую для управления Docker окружением. Например, Docker Engine позволяет автоматизировать создание контейнеров из образов. Хотя вы можете создавать образы вручную, Docker Engine предлагает целый ряд преимуществ, т.к. возможность хранения образов как кода, легкого пересоздания этих образов или включения их в цикл непрерывной интеграции в процессе разработки.

Тем не менее, Docker Engine не является частью установки Windows. Вы должны загрузить, установить и настроить его отдельно от Windows. Docker Engine работает как служба Windows. Можно настроить эту службу, используя файл конфигурации или Windows Service Control Manager (SCM). Например, вы можете установить отладку по умолчанию и параметры журнала или настроить, как Docker Engine принимает сетевые запросы. Microsoft рекомендует использовать файл конфигурации, а не SCM, но отмечает, что не каждый параметр конфигурации в файле применим к контейнерам Windows.

Docker Engine по существу делает всю рутинную работу по управлению контейнером за вас, расширяя API, необходимый для клиента Docker для взаимодействия Docker Engine. Клиент представляет собой интерфейс командной строки, который предоставляет набор команд для управления образами и контейнерами. Это те же самые команды, которые позволяют создавать и запускать контейнеры Docker в Linux. Хотя вы и не можете запустить контейнер для Windows на Linux или контейнер Linux на Windows, вы можете использовать один и тот же клиент для управления как Linux и Windows контейнерами, будь то контейнеры Windows Server или Hyper-V.

Как и с Docker Engine, вам необходимо загрузить и установить клиент Docker самостоятельно. Клиент может работать как на Windows 10 или Windows Server 2016. Вам нужно только указать клиенту Docker службу, которой необходимо начать управлять.

Мир Windows

Microsoft и Docker осталось сделать еще много работы, прежде чем контейнеры для Windows будут полностью функциональны, но то, что мы видим уже сейчас представляет собой значительный шаг вперед. Пользователям Windows, наконец, получат возможность пользоваться всеми преимуществами гибкости и переносимости, которые контейнеры предлагали миру Linux на протяжении более десяти лет.

how to run windows on a docker container

Running Windows in a Docker container might sound like a complex task, but it’s perfectly achievable with the right tools and a clear guide. This blog post will walk you through the entire process, ensuring you have a Windows environment up and running in a Docker container in no time.

Plus, if you’re new to Docker, I’ve got a handy video tutorial covering how to install it on your machine, be it Windows, macOS, or Ubuntu.

Requirements

Before we dive in, ensure Docker is installed and running on your system. If you need help with this, check out my video tutorial or blog post on installing Docker on Ubuntu. If you’re using macOS, the process is slightly different; I’ve covered that in my guide on how to install Docker on macOS, which is essential for this tutorial.

The Project

We’ll utilize a project from GitHub, specifically designed for this purpose. You can find it at https://github.com/dockur/windows. This project uses KVM (a virtual machine) to run Windows inside a Docker container, giving you the full functionality of a Windows environment.

Setting Up Your Environment

First, let’s set up the Docker environment for running Windows. Open your terminal and follow these steps:

  1. Create a new directory for your project:
   mkdir windows
   cd windows
  1. Create a compose.yaml file to define your Docker environment:
   version: "3"
   services:
     windows:
       image: dockurr/windows
       container_name: windows
       devices:
         - /dev/kvm
       cap_add:
         - NET_ADMIN
       ports:
         - 8006:8006
         - 3390:3389/tcp
         - 3390:3389/udp
       stop_grace_period: 2m
       restart: on-failure
       environment:
         VERSION: "win11"
         RAM_SIZE: "8G"
         CPU_CORES: "4"
         DISK_SIZE: "256G"
       volumes:
         - ./data:/storage
  1. With your compose.yaml ready, bring up your Docker container:
   docker compose up -d

Now, your Windows environment should be initialized. You can view the installation process by navigating to localhost:8006 your web browser.

Accessing Your Windows Environment

There are a couple of ways to access your new Windows container:

  • Remini: A convenient tool for connecting to your Windows Docker container.
  • Remote Desktop Protocol (RDP): Use RDP to connect directly using the server IP where your container is running. The default credentials are user: docker and pass: "".

Monitoring and Management

  • To view the resources being used by your Windows container, simply open the Task Manager.
  • Network volumes and mounts can be checked to ensure your data is correctly linked.
  • Remember, to stop the virtual machine, use:
   docker stop windows

If you don’t want the container to start with your computer, update its settings with:

docker update --restart=no windows

Configuration and Usage

  • To inspect your container’s configuration:
docker inspect windows

To start the container:

docker start windows
  • While you can’t play 3D games, many software applications and simpler games will run smoothly.

Legality

Concerned about the legality of this project? Fear not. This project comprises entirely open-source code and doesn’t distribute any copyrighted material. Any product keys found within are generic placeholders provided by Microsoft for trial purposes, making this project legal under all applicable laws.

Conclusion

Running Windows in a Docker container is an excellent way to leverage the flexibility of Docker with the familiarity of Windows. Whether for development, testing, or running specific Windows-only applications, this setup provides a robust solution. Remember, for those new to Docker, ensure you’re comfortable with the basics – my video tutorial and other blog posts, like application monitoring with Docker or guide to deploy Kubernetes, can help you get started.

Feel free to share your thoughts, questions, or feedback in the comments section below. Happy Docking!

Introduction

Ever wondered if you could run a full Windows system inside a Docker container? What once seemed impossible is now a reality thanks to dockur/windows, a groundbreaking solution that lets you run Windows 11, 10, and even classic Windows 7 smoothly within Docker containers.

This guide will walk you through the process of achieving this seemingly impossible task, transforming your Docker container into a fully functional Windows workstation.

RDP Remote Desktop

💡 If you’re interested in running Windows in Docker, this tutorial will guide you step by step through the process.

Why Run Windows in Docker?

Before diving into the technical details, let’s understand the benefits of running Windows in Docker:

  • 🚀 Rapid deployment and migration
  • 💾 Lower resource overhead
  • 🔄 Multiple version coexistence
  • 🛠️ Simplified environment management
  • 🔒 Enhanced isolation

dockur/windows Features Overview

dockur/windows offers these core capabilities:

  • ✨ Support for multiple Windows versions (11/10/8.1/7/XP and more)
  • 🔄 Automatic ISO downloading
  • ⚡ KVM acceleration support
  • 🌐 Web-based remote access
  • 🖥️ RDP remote desktop support
  • 💽 Flexible storage configuration
  • ⚙️ Customizable CPU and memory allocation
  • 💪 ARM version support Check ARM version here

System Requirements

Before starting, ensure your system meets these prerequisites:

💡 If you’re testing in VirtualBox, remember to enable virtualization support first.

Enable Virtualization Support

Requirement Minimum Recommended
OS Linux (KVM support) Ubuntu 22.04+
CPU Virtualization capable 4+ cores
Memory 4GB 8GB+
Storage 20GB free space SSD storage

Basic Installation and Configuration

1. Deploy with Docker Compose

Create a compose.yml file:

   services:
  windows:
    image: dockurr/windows
    container_name: windows
    environment:
      VERSION: "11"    # Choose Windows version
    devices:
      - /dev/kvm      # KVM device mapping
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006     # Web access port
      - 3389:3389/tcp # RDP ports
      - 3389:3389/udp
    volumes:
      - /home/vir-docker/data:/storage  # Windows image will be created on your local drive
    stop_grace_period: 2m # Grace period for clean shutdown

💡 Graceful shutdown enabled

Graceful Shutdown

2. Launch the Container

   docker-compose up -d

System Configuration Guide

Windows Version Selection

Choose different Windows versions by setting the VERSION environment variable:

Code Version Image Size
11 Windows 11 Pro 5.4 GB
11l Windows 11 LTSC 4.2 GB
11e Windows 11 Enterprise 5.8 GB
10 Windows 10 Pro 5.7 GB
10l Windows 10 LTSC 4.6 GB
10e Windows 10 Enterprise 5.2 GB
8 Windows 8.1 Pro 4.0 GB
8e Windows 8.1 Enterprise 3.7 GB
7e Windows 7 Enterprise 3.0 GB
ve Windows Vista Enterprise 3.0 GB
xp Windows XP Professional 0.6 GB
2025 Windows Server 2025 5.0 GB
2022 Windows Server 2022 4.7 GB
2019 Windows Server 2019 5.3 GB
2016 Windows Server 2016 6.5 GB
2012 Windows Server 2012 4.3 GB
2008 Windows Server 2008 3.0 GB
2003 Windows Server 2003 0.6 GB

Storage Configuration

Modify default storage location:

   volumes:
  - /var/win:/storage  # Custom storage path

Adjust disk sizes:

   environment:
  DISK_SIZE: "256G"   # Primary disk size
  DISK2_SIZE: "32G"   # Secondary disk size
  DISK3_SIZE: "64G"   # Third disk size
volumes:
  - /var/win:/storage    # Primary disk path
  - /home/win:/storage2  # Secondary disk path
  - /mnt/win:/storage3   # Third disk path

System Resource Allocation

Configure CPU and memory:

   environment:
  RAM_SIZE: "8G"      # Allocate 8GB RAM
  CPU_CORES: "4"      # Allocate 4 CPU cores

Language Customization

By default, Windows installs in English. Set a different language using the LANGUAGE environment variable:

   environment:
  LANGUAGE: "English"  # Set Windows language

Supported languages include:

Language Setting Language Setting
English English Chinese Chinese
Japanese Japanese Korean Korean
French French German German
Spanish Spanish Russian Russian
Italian Italian Portuguese Portuguese

💡 Tip: Choose officially supported languages for best stability and compatibility.

Remote Access Setup

Web Access

  1. Access http://your-host-ip:8006 after container launch

    Web Access

  2. Wait for automatic installation
  3. Installation is complete when Windows desktop appears

RDP Remote Desktop

  1. Connect using any RDP client to your-host-ip:3389
  2. Default username: Docker
  3. Default password: none

Custom Credentials

   environment:
  USERNAME: "admin"
  PASSWORD: "secure_password"

Advanced Configuration

Custom Installation Scripts

Create and mount install.bat:

   volumes:
  - /path/to/scripts:/oem

DHCP Network Configuration

Enable DHCP:

   environment:
  DHCP: "Y"
devices:
  - /dev/vhost-net
device_cgroup_rules:
  - 'c *:* rwm'

Troubleshooting

KVM Support Verification

Check KVM support:

   sudo apt install cpu-checker
sudo kvm-ok

Performance Optimization Tips

  1. Enable CPU virtualization extensions
  2. Use SSD storage
  3. Allocate sufficient system resources
  4. Consider macvlan networking for better performance

Conclusion

dockur/windows provides a powerful and flexible solution for running Windows systems in Docker containers. This guide enables you to easily deploy and manage Windows in Docker, opening new possibilities for development, testing, and virtualization scenarios.

References

  • dockur/windows GitHub Repository
  • Docker Documentation
  • Microsoft Remote Desktop Documentation

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Program manager при выключении windows 10
  • Как определить процессор на компьютере windows 10
  • Windows server логи перезагрузки
  • Рекомендуется сменить ваш пароль windows 7
  • Снос windows 10 на ноутбуке