Мотивация
Устали от Docker Desktop? Будет вам Windows 10/11 или Windows Server 2022, с установленной VMWare Workstation, внутри неё — Hyper-V, внутри неё — Docker Desktop или Docker Engine, а внутри него… ну, вероятно, смерть Кощеева.
Зачем это нужно автору статьи? По работе мне нужно делать скринкасты и презентации. Клиенты пользуются докером на Windows. Значит, и мне нужно показывать всё на нём! С другой стороны, Docker Desktop требует обязательного Hyper-V всей системы, что её затормаживает и делает невозможной нормальную работу с другими виртуализаторами типа VMWare Workstation. С десктопным Linux у Hyper-V всё плохо, графический интерфейс такой, что лучше бы его не было, и т.п.
В этом посте вас ждёт точное описание действий по избавлению от Docker Desktop на своей машине и переносу его под nested virtualization.
Удаление Docker Desktop (Windows 10/11)
Он всё равно существует только на дестопе, поэтому удалить проще в графическом режиме, из админки Apps and Features.
Удаляем Hyper-V
В эскалированном Power Shell выполните:
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
DISM /Online /Disable-Feature:Microsoft-Hyper-V
bcdedit /set hypervisorlaunchtype off
Свершилось! Зло повержено!
Установите VMWare Workstation Pro
Купить за 200 баксов и скачать можно на официальном сайте.
Создайте новую VM
Создайте новую виртуалку для Windows, не устанавливайте операционную систему.
Зайдите в настройки, и на вкладке Processors включите вот эти галки:
- Virtualize Intel VT-x/EPT or AMD-V/RVI
- Virtualize CPU performance counters
Сохраните настройки и закройте все окна VMWare (это важно).
Откройте VMX файл вашей виртуальной машины (вспомните, куда вы её сохранили на жестком диске). Добавьте вот эти строчки:
hypervisor.cpuid.v0 = "FALSE"
mce.enable = "TRUE"
vhv.enable = "TRUE"
Теперь запустите виртуальную машину и установите Windows.
Установите Windows Terminal
Использовать cmd.exe — очень больно. Windows Terminal куда лучше.
На обычной Windows 10/11, можно просто сходить во встроенный магазин:
https://www.microsoft.com/en-gb/p/windows-terminal/9n0dx20hk701
На Windows Server всё немножко сложней, потому что магазин не работает.
Вначале нужно забрать ссылку на Терминал (прокрутите страничку до раздела Assets в самом свежем релизе):
https://github.com/microsoft/terminal/releases?WT.mc_id=modinfra-26926-thmaure
URL выглядит как-то так:
https://github.com/microsoft/terminal/releases/download/v1.12.3472.0/Microsoft.WindowsTerminalPreview_1.12.3472.0_8wekyb3d8bbwe.msixbundle
Можно либо скачать этот файл из браузера, либо загрузить из консоли:
Invoke-WebRequest -Uri https://github.com/microsoft/terminal/releases/download/v1.12.3472.0/Microsoft.WindowsTerminalPreview_1.12.3472.0_8wekyb3d8bbwe.msixbundle -outfile terminal.msixbundle
Важно, что загрузка из консоли будет длиться дольше, чем из браузера.
Теперь можно установить пакет, набрав в консоли следующее:
Add-AppxPackage terminal.msixbundle
Windows Terminal теперь можно найти в меню Пуск.
Устанавливаем nested Hyper-V
В эскалированном Power Shell запускаем:
Install-WindowsFeature -Name Hyper-V -Restart -IncludeAllSubFeature -IncludeManagementTools
Перезагружаем виртуалку.
Проверяем, что виртуализация включилась:
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
Ожидаемый выхлоп:
FeatureName : Microsoft-Hyper-V
DisplayName : Hyper-V
Description : Hyper-V
RestartRequired : Possible
State : Enabled
Еще можно попробовать так:
Get-ComputerInfo -property "HyperV*"
Ожидаемый выхлоп:
HyperVisorPresent : True
HyperVRequirementDataExecutionPreventionAvailable :
HyperVRequirementSecondLevelAddressTranslation :
HyperVRequirementVirtualizationFirmwareEnabled :
HyperVRequirementVMMonitorModeExtensions :
Еще можно проверить вкладку CPU в вашем диспетчере задач, Task Manager. Там должно быть написано: “Virtualization: Enabled” в правом нижнем углу, в свойствах процессора.
Установите браузер (Windows Server 2022)
Добрый совет: если используете Windows Server и браузер Edge, то там работают повышенные меры безопасности. Их можно отключить, но т.к. браузер — важная часть системы, то это может привести к примерно любым последствиям. Чтобы нормально браузить интернет и не погрязнуть в троянах, советую скачать Firefox: https://www.mozilla.org/ru/firefox/new/
Установите WSL2 (Windows Server 2022)
WSL2 на этой платформе не поддерживается.
Почитать можно здесь:
- https://github.com/microsoft/WSL/issues/6301#issuecomment-858816891
- https://techcommunity.microsoft.com/t5/windows-server-insiders/wsl-2-not-working-after-installing-20262/m-p/1928823/highlight/true/page/2
Вместо этого нужно использовать Docker Engine, который будет работать с Hyper-V напрямую.
Установите WSL2 (Windows 10/11)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Дальше нужно вкорячить патч на ядро: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
Просто запустите и прощелкайте кнопку Next.
Переключитесь на WSL2:
wsl --set-default-version 2
Если после выполнения этой команды вы увидите огромную простыню текста, как если бы вы вызвали эту команду с ключиком –help, это означает, что WSL2 на вашей платформе почему-то не поддерживается (например, вы используете Windows Server).
Выберите дистрибутив для WSL:
wsl -l -o
Ожидаемый выхлоп:
The following is a list of valid distributions that can be installed.
Install using 'wsl --install -d <Distro>'.
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
openSUSE-42 openSUSE Leap 42
SLES-12 SUSE Linux Enterprise Server v12
Ubuntu-16.04 Ubuntu 16.04 LTS
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Теперь, установите выбранное. Парметром нужно указвать NAME из таблицы выше.
wsl --install -d Ubuntu
wsl --setdefault Ubuntu
Проверьте версию WSL:
wsl --list --verbose
Ожидаемый выхлоп:
wsl --list --verbose
NAME STATE VERSION
* Ubuntu Stopped 2
Если вы увидите там цифру 1, то вы забыли переключить версию ( wsl –set-default-version 2 ).
Установите nested Docker Dekstop (Windows 10/11)
Подробнее в этой документации: https://docs.docker.com/desktop/windows/install/
Просто скачайте его с официального сайта: https://www.docker.com/products/docker-desktop
Скачайте и прощёлкайте кнопку Next. По ходу инсталляции поставьте галку рядом с “Install required Windows components for WSL2”. В принципе, вы и так уже установили всё, что нужно, но чем чёрт не шутит.
Перезагрузите виртуальную машину.
Установите nested Docker Engine (Windows Server 2022)
Подробности описаны вот в этой документации: https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Если по ходу установки будут какие-то ошибки, в которых говорится про SSL и TLS, попробуйте такое:
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
Установите Docker Engine:
Install-Package -Name docker -ProviderName DockerMsftProvider
Перезапустите виртуальную машину:
Restart-Computer -Force
Проверьте, что Докер запустился и действительно работает:
docker run hello-world
Ожидаемый выхлоп:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
11961e4f2e13: Pull complete
d24add324b48: Pull complete
caa028ea82a4: Pull complete
Digest: sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
Profit
Я научил вас всему, что сам знал. А теперь…

Add comment