Как стать автором
Обновить

Установка и правильная настройка Docker на Windows Subsystem Linux (WSL)

Время на прочтение5 мин
Количество просмотров49K
Всего голосов 6: ↑5 и ↓1+6
Комментарии37

Комментарии 37

Ничего себе, сколько приседаний надо сделать только для запуска докера… Оно того стоит?

Я смотрю, что оригинал был написал больше года назад. Сам Докер за это время не научился в WSL нативно?
WSL2 will be generally available in Windows 10, version 2004
Да, я тоже жду Windows 10 2004 где будет WSL2 — что есть полноценное ядро Linux, а не эмуляция в WSL (1.0). Там докер будет запускаться без таких танцев с бубном
Обещали в мае, но в связи сами знаете с чем, непонятно когда выйдет.
Думаю также в мае и начнётся. Разработку они закрыли под новый год. Сейчас уже идёт стадия финального тестирования.

Можно не ждать. WSL2 в раз 10 медленней WSL1. Зря только ставил ради этого инсайдерскую версию винды… Докер под виндой вообще очень тормознутый.

У тебя какие-то проблемы с файловой системой, у меня работает не медленнее нативного варианта.

Ну не знаю. На чистой линухе та же стартовая страничка на симфони загружается за 75-100мс, на WSL1 за ~400-600мс, а на WSL2 так вообще за 3-4сек. Я тут подумал, возможно, если проект разворачивать не на локальных дисках винды, а на самом WSL, внутри какой-нибудь директории home, то должно работать гораздо быстрее. Но это не точно.
Разница в скорости i/o в файловой системе винды и WSL2 сильно отличаются — docs.microsoft.com/en-us/windows/wsl/wsl2-ux-changes#cross-os-file-speed-will-be-slower-in-initial-preview-builds. Пользуюсь WSL2 на работе и не знаю бед, все работает быстрее и нативнее чем у маковских коллег.
А проект в самом WSL разворачиваешь или на локальных дисках?
Разворачиваю в \\wsl$. Нужно чтобы докер и проект были в одной системе, чтобы не было кросс-системной работы с файлами.
Ну вот. Из-за этого, возможно, у меня и тормозяки докера…
Точно из-за этого, у них в документации об этом целый параграф написан — для кого WSL 1, а для кого WSL 2.
пару дней подождать и 2004H выйдет
Вчера я только про это подумал,
А сегодня ребятя из Докера уже написали статью, в которой говорят, что они вовсю тестируют докер с WSL 2:
www.docker.com/blog/how-we-test-docker-desktop-with-wsl-2
service docker start

Подозрительно похоже на upstart. Это точно про systemd? Его вызов выглядел бы как
systemctl start docker
Он вообще «искаропки» умеет запускать сервис от любой учётной записи без приседаний с sudo, описанными в статье.
В общем, я считаю, что если с каким-то сервисом не поставляется unit-файл — стыд и позор его мейнтейнерам (maintainers). С другой стороны, не хотите стыдить и позорить — свой unit-файл пишется примерно 5 минут (читать здесь и здесь). Может получиться что-то типа
такого.
[Install]
WantedBy=multi-user.target
[Service]
Type=forking
Environment=PID_FILE=/opt/unrealircd/data/unrealircd.pid
PIDFile=/opt/unrealircd/data/unrealircd.pid
ExecStart=/opt/unrealircd/bin/unrealircd
ExecStop=/bin/kill -15 $MAINPID
User=sp
WorkingDirectory=/opt/unrealircd
[Unit]
ConditionPathExists=/opt/unrealircd/conf/unrealircd.conf

За окном уже 2020 — пора знать systemd.
Я так полагаю, что статья опирается на Ubuntu 16.04+, то там ещё есть поддержка Upstart и вызов service docker start прокатывает. И то что unit-файла для нестандартной установки нет — думаю в этом ничего не логичного нет. Себе на Ubuntu 18.04 я ставил по официальной инструкции без проблем. Всё запускается само — файл есть :)

если есть systemd, то обычно service просто перенаправляет на systemctl внутри.


# service nginx status
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-02-11 16:19:40 MSK; 2 months 0 days ago
 Main PID: 1248 (nginx)
    Tasks: 5
   Memory: 13.4M
      CPU: 3h 36min 30.064s
   CGroup: /system.slice/nginx.service
           ├─ 1248 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
           ├─10943 nginx: worker process
           ├─10944 nginx: worker process
           ├─10945 nginx: worker process
           └─10946 nginx: worker process

Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
Полгода тому назад с WSL не получилось завести docker-compose из-за проблем с iptables, поэтому вернулся на легаси вариант где используется VirtualBox. Интересно есть ли у кого-нибудь положительный опыт?
Есть. Буквально в пятницу прошел во второй раз пусть настройки WSL2. Именно WSL2, прошу обратить внимание. При запуску ubuntu делаю `service docker start`, далее все ровно также, как если бы был на нативном линуксе, т.е. docker-compose, swarm, что угодно. Устанавливал по официальным гайдам от MS. Главное — это обновить версию ядра винды до той, где можно будет переключить образ убунту на вторую версию wsl.
Не очень понимаю этих танцев с бубнами.
Win10 Insider Preview Fast Ring + WSL2 + Docker Desktop Edge
Пол года полёт нормальный.
DD Edge ставит докер в отдельный дистрибутив WSL2, пробрасывает докер в ваши WSL2 дистрибутивы и на винду. Всё отлично работает (кубер не тестил).
Upd: Win10 одна из сборок — поломала WSL2. Откатился назад, подождал неделю — обновился, всё супер.
НЛО прилетело и опубликовало эту надпись здесь
Через виртуалку тем более танцы. У меня на ноуте это основная и единственная ОС (не считая wsl2 дистрибутивы)

Это the god food challenge:


  • Неустранимых багов #902 и #1927 достаточно чтобы здоровый человек зарекся использовать WSL1.
  • Проблем "very slow" достаточно чтобы не связываться с WSL2, но для "потыкать палочкой" (не для production) вполне приемлемо.
very slow — смотря для чего.
Мне не нужна WSL2 чтобы из под винды сидеть в FS линухи.
Я либо в иксах, либо в терминале, либо в VScode (wsl remote).
Тогда она совсем не very slow.
Пробовал я использовать докер/wsl2/windows и vscode remote. По нашим тестам — только git pull/push занимает в 3-7 раз дольше чем на нативной системе, а ещё если работает VPN сеть в WSL2 отваливается, хотя в WSL1 работает, первая версия намного медленней второй. После месяца мучений и тестов просто получили апрув на маки и. теперь я щастлив.
Ещё перформанс тести вот здесь есть www.phoronix.com/scan.php?page=article&item=wsl-windows-eo2019&num=1
Gigabyte AERO 15 OLED WA, (9750H/512nvme) — я не видел задержек по сравнению с рабочим компом(слез с него как взял себе этот ноут). Учитывая конфигурацию (на работе SATA SSD) — у меня быстрее отрабатывает git.

Важно понимать, что в WSL2 нужно сидеть в «не шаренных» директориях (/home/xxx/dir — по умолчанию не расшарена, /mnt/{c,d,e...}/ — расшарены).
Я много читаю и слышу о проблемах в WSL2, но меня они не касаются — ни при сборке nuxtjs, ни при установке composer, ни при билдах Go-сервисов, ни при билдах docker.
Есть только две проблемы, которые доставляют дискомфорт:
1. ekaterinaryabukha Вы пилите idea-wsl2-remote? Нам очень не хватает виндовых GUI и linux environment вместе с вашими продуктами, вынуждены юзать VScode и скоро совсем к нему привыкнем.
2. GPU/CUDA/ML не работает в WSL2.
И одна проблема была с билдом Win10 Fast Ring — поломали wsl2 в сборке. откатился на предыдущий билд и всё тип топ.
Выше я привел ссылку на бенчмарки которые показывают WSL не супер быстрим в сравнении с нативным линуксом. Если поискать — на github есть множество тикетов про проблемы с перфомансом, но самая большая проблема для нас оказалось поломанный нетворкинг при подключенном VPN.

При подключении Cisco AnyConnect полностью отваливается нетворкинг в WSL2 (правда говоря в WSL1 все работает, но тормоз это еще тот). И де ми сравнивали не NVMe vs SATA/SSD, а два ноута с одинаковой конфигурацией (одно поколение процов, одинаковое количество памяти и немного разние диски).
Последние новости по поддержке WSL можно почитать, начиная с этого комментария.
Судя по комментам — о той поддержке как в vscode — речь не идёт. Посмотрим что замутили в phpstorm, но похоже придётся принять то что JB не справится с WSL2 «a la native»

Спасибо, но уже не надо. Получил апрув на использование мака в корпоративной сети и забыл о WSL как о страшном сне. Ну и ище раз убедился что видна не моё и на собесах надо уточнять не только что используется в инфраструктуре но и на ноутах.

Я знаю еще много «правильных» способов запуска docker. Например, nssm, который умеет запускать консольное приложение как службу windows. Или запустить любой гипервизор, можно даже qemu. Вот только зачем запускать docker в windows?

Так и не смог в схеме windows+docker заставить корректно работать монтирование, не работало монтирование например данных mongodb, ругалось на не существующие файлы, что-то со ссылками я так понял.


В wsl2 вроде должно все хорошо работать

Вопрос, docker по прежнему требует специфических настроек в windows при которых vmware не функционирует или я отстал от жизни и это пофиксили?

VMWare, которая может работать с активным Hyper-V сейчас в превью, если это имелось ввиду.
спасибо за инфу
Очень жду когда докер допилят до ума в винде, относительно недавно поймал проблему с монтированием волюмов в docker-compose, после пары часов дебага казалось бы банальной вещи, оказалось быстрее освоить Remote Development extension pack в VSCode, и с тех пор бед не знаю. В общем ждемс wsl 2.0 :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий