Установка и настройка Docker на Windows Subsystem Linux (WSL2)

Есть два варианта установки платформы контейнеризации Docker на Windows 10 и 11: в виде нативного win приложения Docker Desktop for Windows (используется встроенные компоненты Hyper-V + контейнеры Windows), или в виде полноценной установки Docker Engine в дистрибутив Linux в подсистеме Windows Subsystem for Linux (WSL2). В этой статье мы рассмотрим процесс установки и базовой настройки Docker в среде WSL без использования Docker Desktop.

Преимущества от запуска Docker внутри WSL:

  • Docker Desktop требует Pro или Enterprise редакции Windows 10 (11). Docker Engine в WSL будет работать на домашних (Home) редакциях Windows
  • Docker Desktop для Windows потребляет довольно много RAM и места для хранения отдельных виртуальных машин Hyper-V (в случае использования Windows контейнеров)
  • Лицензионные ограничения позволяют бесплатно использовать Docker Desktop для персональных проектов, или в небольших организациях (до 250 сотрудников). В других случаях нужно приобрести лицензию.

Итак, предполагаем что у вас есть компьютер с Windows 10 и 11, на котором вы установили среду Windows Subsystem for Linux (WSL2) и скачали один из доступных Linux образов (Ubuntu 24.04 в этом примере). Выведите список доступны дистрибутивов WSL:

wsl --list

Чтобы задать образ WSL, который будет использоваться по-умолчанию, выполните команду:

wsl --setdefault Ubuntu-24.04

wsl - список дистрибутивов

Убедитесь, что используется версия WSL2:

wsl --version

Версия WSL2

Если нет, выполните команду:

wsl --set-default-version 2

Чтобы подключиться к вашему дистрибутиву Linux в среде WSL, выполните:

wsl.exe

Обновите пакеты в дистрибутиве Linux (Ubuntu в этом случае):

$ sudo apt-get update && sudo apt-get upgrade -y

Затем выполните установку Docker Engine в Linux с помощью универсального официального скрипта:

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

Игнорируйте появившееся предупреждение об установке Docker в среде WSL.

Установка docker engine в WSL2 на Windows

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

$ sudo usermod -aG docker $USER

Проверьте, что Docker desktop и compose установлены успешно:

$ docker --version
$ docker compose version

проверить, что docker и docker compose установлены

Теперь нужно настроить автоматически запуск docker в WSL. В современных дистрибутивах Linux для WSL2 добавлена полноценная поддержка systemd . Проверьте, что он включен:

$ cat /etc/wsl.conf

[boot]_x000D_systemd=true

Проверить что systemd включен в WSL

Затем проверьте, что systemd используется в качестве системы инициализации Linux:

$ stat /sbin/init

В данном используется systemd, т.к. процесс /sbin/init это символьная ссылка на /lib/systemd/systemd.

/lib/systemd/systemd

Запустите сервис docker engine и включите автоматический запуск:

$ sudo systemctl enable --now docker.service
$ systemctl status docker.service

Автозапуск docker.service в WSL

Если systemd не используется по той или иной причине, можно добавить его в автозагрузку WSL:

$ nano /etc/wsl.conf

[boot]_x000D_command = "/usr/sbin/service docker start"

WSL2 по-умолчанию может использовать следующие ресурсы компьютера:

  • 50% оперативной памяти
  • 25% файла подкачки (swap)
  • 100% ресурсов процессора

Если вы хотите ограничить использование ресурсов хоста подсистемой WSL2, создайте в профиле текущего пользователя текстовый файл %UserProfile%.wslconfig . В этом файле можно задать глобальные ограничения для всех дистрибутивов в WSL. Например:

[wsl2]_x000D_memory=8GB_x000D_processors=4_x000D_swap=2GB

Перезапустите образ WSL из командой строки Windows:

wsl --shutdown

Попробуйте запустить тестовый docker образ в WSL:

$ docker run hello-world

Docker Engine скачает и запустит демонстрационный контейнер hello-world из Docker Hub.

Для обеспечения максимального производительности WSL2, храните все файлы контейнеров внутри WSL (а не в директориях, которые пробрасываются с Windows, таких как /mnt/c).

В современных версиях Linux (Ubuntu 22.04, Debian 10+) для управления встроенным файрволом используется nftables, а не iptables. Для нативной поддержки nftables в WSL требуется ядро Linux 5.8 или выше. В старых версиях ядра для корректной работы сети придется включать совместимость с iptables:

$ sudo update-alternatives --config iptables

update-alternatives --config iptables
Нажмите 1 для выбора режима iptables-legacy.

Теперь вы можете выполнять команды к docker в WSL из командной строки Windows. Перед командами docker нужно указывать wsl . Например, вывести список доступных образов в Docker:
wsl docker images
Управление docker контейнерами из Windows
Теперь вы можете разрабатывать и запускать Docker контейнеры непосредственно на своем Windows компьютере.

EnglishRussianUkrainian