WSL (Windows Subsystem for Linux) — это подсистема Windows, которая позволяет запускать Linux-приложения на компьютере без установки отдельной виртальной машины или дополнительной операционной системы.
WSL2 работает на базе гипервизора. И это в свою очередь позволяет запускать полноценное ядро Linux внутри виртуальной машины на компьютере под управлением Windows. Использование гипервизора значительно снизило накладные расходы что в свою очередь улучшило производительность и совместимость приложений Linux.
Отличия WSL2 от WSL1
Функция | WSL 1 | WSL 2 |
---|---|---|
Интеграция Windows и Linux | ✅ | ✅ |
Быстрый запуск | ✅ | ✅ |
Небольшой объем занимаемых ресурсов по сравнению с традиционными Виртуальными машинами | ✅ | ✅ |
Запуск с использованием текущих версий VMware и VirtualBox | ✅ | ✅ |
Управляемая виртуальная машина | ❌ | ✅ |
Полнофункциональное ядро Linux | ❌ | ✅ |
Полная совместимость системных вызовов | ❌ | ✅ |
Производительность в файловых системах ОС | ✅ | ❌ |
Docker и WSL2
WSL дает возможность использовать Docker Desktop на Windows, без необходимости установки отдельной виртуальной машины.
С приходом WSL2 было исправлено много багов в работе с Docker и его сетями, и производительностью ядра и самих Docker контейнеров.
WSL2 доступен только обладателям Windows 10 и выше.
В настоящие дни при использовании WSL2 у вас не должно возникать никаких трудностей при работе с Docker, я бы сказал так — Работает как часы.
Установка WSL2, Docker
- Для начала скачайте и установите Docker Desktop для Windows
https://docs.docker.com/desktop/windows/install/ - Запустите Docker Desktop.
- Потом, скачайте Ubuntu 20 или версию свежее из Microsoft Store
https://www.microsoft.com/store/productId/9N6SVWS3RX71 - Запустите Ubuntu terminal и при первом запуске введите там
Unix name
&password
. - После этого запустите PowerShell Terminal и выполните там следующие команды:
# check current WSL version
wsl -l -v
# if we have WSL1 (you will see VERSION 1), we need to change WSL1 to WSL2.
wsl --set-default-version 2
# If you already have a <Ubuntu-20.04>, you should to run:
wsl --set-version Ubuntu-20.04 2
# now if you check your WSL version you will see "VERSION 2"
wsl -l -v
# Close power shell
- Внутри терминала Ubuntu 20, давайте выполним обновление источников пакетов и установим Docker, ZIP, Git, Make, Tree пакеты:
#Update packages sources
sudo apt update
#Install packages
sudo apt install zip unzip git tree docker make
- Теперь, внутри WSL2 у нас установлен Docker.
- Необходимо проверить, что Docker работает корректно, выполните одну из следующих команд:
docker --version
илиsudo docker --version
- вы должны увидеть примерно такой вывод
Docker version 24.0.2, build cb74dfc
! Если команды выше выдают результат чтоdocker
команды нет, проверьте что Docker Desktop включен и в его настройках стоит галочка как на скриншоте ниже:
- Необходимо проверить, что Docker работает корректно, выполните одну из следующих команд:
- Далее необходимо установить Docker Compose
https://docs.docker.com/compose/install/ .
В нашем случае необходимо рассматривать вариант установкиScenario two
илиScenario three
. - И потом мы можем добавить docker юзера в наше Linux ядро:
sudo groupadd docker
sudo usermod -aG docker $USER
- Закройте терминал и откройте его снова и выполните контрольную проверку:
docker run hello-world
# You should see `Hello from Docker!` in success result.
# try to use one of them
docker-compose --version
docker compose --version
# You must see version higher 1.28
Вуаля, теперь наше локальное окружение на WSL2 + Docker настроено и готово к работе!
Производительность
Чтобы получить максимальную производительность на WSL2, рекомендуется хранить файлы проекта внутри WSL.
В случае если вы разместите файлы рабочего проекта в файловой системе Windows — вы почувствуете просадку в производительности. Это особенно хорошо это будет видно на больших проектах с раздутой директорией vendor или node_modules.
Это происходит потому что Docker будет обращаться к этим файлам через виртуальный сетевой диск, который подключен к WSL.
Доступ к файловой системе WSL через PHPStorm и файловый менеджер
После того как вы разместили файлы проекта в WSL, вы можете подключить PHPStorm к WSL проекту, по пути: \wsl$\Ubuntu\home\
:
Так же вы можете получить доступ к файловой системе WSL через файловый менеджер по пути \\wsl$\Ubuntu\home
или \\wsl.localhost\Ubuntu\home
:
Подводя итог
Теперь вы можете смело использовать Docker в WSL на Windows для поднятия своих проектов в контейнерах. Храня файлы проекта внутри WSL2 вам больше не придется задумываться о проблемах с производительностью и навсегда исчезнут проблемы связанные с симлинками.