Docker с WSL2 на Windows

.wpj-jtoc.—jtoc-theme-basic-light.—jtoc-has-custom-styles {
—jtoc-numeration-suffix: «. «;
—jtoc-numeration-color: #adadad;
}

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 для Windows
    https://docs.docker.com/desktop/windows/install/
  • Потом, скачайте 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 Compose
    https://docs.docker.com/compose/install/ .
  • И потом мы можем добавить 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$Ubuntuhome:

Так же вы можете получить доступ к файловой системе WSL через файловый менеджер по пути \wsl$Ubuntuhome или \wsl.localhostUbuntuhome:

Подводя итог

Теперь вы можете смело использовать WSL на Windows для поднятия своих проектов в Docker контейнерах. Храня файлы проекта внутри WSL2 вам больше не придется задумываться о проблемах с производительностью и навсегда исчезнут проблемы связанные с симлинками.

Источник: WP-Yoda.com

Андрей Писаревский

Андрей Писаревский — Backend Team Lead в EPAM. Имею коммерческий опыт в программировании с 2010 года и экспертизу в полном цикле веб разработки: frontend, backend, QA, а так же server administration. Использую в работе: PHP, WordPress, Slim Framework, Linux, Docker, Agile.

%d такие блоггеры, как: