3 июн. 2021 г.
Всем привет! Сегодня хотел бы поделиться опытом использования Docker под Windows.
Возникла необходимость запустить на Windows 10 один из своих PHP проектов. Последнее время работаю в основном под Linux, большинство проектов запускаю в Docker окружении. Docker изначально создавался для Linux и работает под ним заведомо корректно.
До этого я пытался использовать Docker под Windows/Mac, но всякий раз возникали какие-то проблемы. В итоге все сводилось к установке Linux на виртуальную машину Virtualbox, и установке Docker на виртуалке.
Ситуация изменилась к лучшему, когда в Windows 10 появилась WSL. WSL создает Linux окружение в Windows 10. При этом это не совсем виртуалка, WSL интегрирована в хост систему. А WSL2 совместима с Docker для Windows.
Для корректной работы рекомендуется установить все последние обновления Windows. Мне не удалось настроить Docker + WSL на необновленной системе. Как миниум, необходимо, чтобы в системе была установлена именно WSL2.
Включил WSL и установил Docker по этому руководству. Последовательность действий:
1 . Запустить powershell
2 . Включить WSL
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
3 . Включить Virtual Machine
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
4 . Перезагрузить компьютер
5 . Установить обновление WSL
6 . Включить по-умолчанию 2 версии WSL
wsl --set-default-version 2
7 . Установить Ubuntu 20.04 из Microsoft Store.
При установке задать имя пользователя(прим: antonshell
) и пароль.
8 . Установить Docker для Windows, включить поддержку WSL2
9 . Запустить тестовый Docker образ
docker run -it --rm -p 8000:80 --name my-sample mcr.microsoft.com/dotnet/samples:aspnetapp
10 . Проверить, что все работает: http://localhost:8000/
Linux дистрибутив открывется с ярлыка, пользователь автоматически залогинен, находится в домашней директории. Можно использовать стандартные linux утилиты, например htop, mc и т.д.
В качестве тестового проекта использовал placeholder-service - сервис для генерации заглушек изображений.
1 . Нужно зайти в консоль Ubuntu и создать папку с проектами.
mkdir -p /home/antonshell/Projects
cd /home/antonshell/Projects
2 . Затем установить проект
git clone https://github.com/antonshell/placeholder-service.git
cd placeholder-service
docker-compose up -d
docker-compose exec php-fpm composer install
3 . И проверить работоспособность: http://127.0.0.1:16880, http://127.0.0.1:16880/img
Важно, чтобы проект находился именно в файловой системе Linux. Иначе web приложение работает на порядок медленнее.
К примеру, если проект запускается из /home/antonshell/Projects/placeholder-service
, то загрузка занимает 80мс.
А если из C:\Projects\placeholder-service
, то целых 1180мс.
Файловая система Windows автоматически монтируется в Ubuntu в директорию /mnt/c/
.
Для доступа к файловой системе Ubuntu из Windows необходимо открыть проводник, ввести в адресной строке \\wsl$
и выбрать нужную директорию.
Затем ее можно добавить в избранное или подключить как сетевой диск.
К сожалению, настроить XDebug под WSL пока не получилось. Делал по этому руководству: https://blog.denisbondar.com/post/phpstorm_docker_xdebug. Под Linux работает корректно.
Docker под Windows 10 работает вполне неплохо благодаря WSL2. Конечно, переходить с Linux на Windows нет никакого желания. Однако включить в проект разработчика, работающего под Windows становится гораздо проще.
Тестовый проект доступен на github. На этом пока все. Спасибо за внимание!