Начало работы с удаленными контейнерами Docker в WSL 2
Это пошаговое руководство поможет вам приступить к разработке с удаленными контейнерами, настроив Docker Desktop для Windows с WSL 2 (подсистема Windows для Linux версии 2).
Docker Desktop для Windows предоставляет среду разработки для создания, доставки и запуска dockerized приложений. Включив подсистему WSL 2, вы можете запускать контейнеры Linux и Windows в Docker Desktop на одном компьютере. (Docker Desktop бесплатно для личного использования и малого бизнеса, сведения о ценах на Pro, Team или Business см. в разделе Часто задаваемые вопросы о сайте Docker).
Примечание.
Рекомендуется использовать Docker Desktop из-за интеграции с Windows и подсистема Windows для Linux. Однако в то время как Docker Desktop поддерживает запуск контейнеров Linux и Windows, вы не можете одновременно запускать оба контейнера. Чтобы одновременно запускать контейнеры Linux и Windows, необходимо установить и запустить отдельный экземпляр Docker в WSL. Если вам нужно запустить одновременные контейнеры или просто предпочесть установить подсистему контейнеров непосредственно в дистрибутиве Linux, следуйте инструкциям по установке linux для этой службы контейнеров, например Install Docker Engine on Ubuntu или Install Podman для запуска контейнеров Linux.
Общие сведения о контейнерах Docker
Docker — это средство для создания, развертывания и запуска приложений с использованием контейнеров. Контейнеры позволяют разработчикам упаковывать приложения с использованием всех необходимых компонентов (библиотек, платформ, зависимостей и т. п.) и поставлять все это как один пакет. Использование контейнера дает возможность приложению работать одинаково, независимо от настроенных параметров или ранее установленных библиотек на компьютере, где оно запускается, так как он может отличаться от компьютера, который использовался для написания и тестирования кода приложения. Это позволяет разработчикам сосредоточиться на написании кода, не беспокоясь о том, в какой системе он будет выполняться.
Контейнеры Docker похожи на виртуальные машины, но не создают всю виртуальную операционную систему. Вместо этого контейнер Docker позволяет приложению использовать то же ядро Linux, что и система, в которой оно работает. Таким образом пакету приложения требуются только те части, которых еще нет на главном компьютере. В результате размер пакета уменьшается, а производительность увеличивается.
Постоянная доступность, которую обеспечивает использование контейнеров Docker с такими инструментами, как Kubernetes, — еще одна причина популярности контейнеров. Это позволяет создавать несколько версий контейнера приложения в разное время. Вместо того чтобы снять всю систему для обновлений или обслуживания, можно заменить каждый контейнер (и его конкретные микрослужбы). Вы можете подготовить новый контейнер со всеми обновлениями, настроить его для рабочей среды и просто указать новый контейнер после его готовности. Можно также архивировать различные версии вашего приложения, используя контейнеры, и при необходимости поддерживать их работу в качестве резервного ресурса.
Дополнительные сведения см. в статье "Общие сведения о контейнерах Docker".
Необходимые компоненты
- WSL версии 1.1.3.0 или более поздней.
- Windows 11 64-разрядная версия: домашняя или pro версии 21H2 или более поздняя, корпоративная или 21H2 или более поздняя.
- Windows 10 64-разрядная (рекомендуется): домашняя или pro 22H2 (сборка 19045) или более поздней версии, или Корпоративная или образование 22H2 (сборка 19045) или более поздней версии. (Минимум): Home или Pro 21H2 (сборка 19044) или более поздней версии, или Enterprise или Education 21H2 (сборка 19044) или более поздней версии. Обновление Windows
- 64-разрядный процессор с преобразованием адресов второго уровня (SLAT).
- ОЗУ системы 4 ГБ.
- Включите виртуализацию оборудования в BIOS.
- Установите WSL и настройте имя пользователя и пароль для дистрибутива Linux, работающего в WSL 2.
- Установите Visual Studio Code (необязательно). Это обеспечит лучший интерфейс, включая возможность кода и отладки внутри удаленного контейнера Docker и подключения к дистрибутиву Linux.
- Установите Терминал Windows (необязательно). Это обеспечит лучший интерфейс, включая возможность настройки и открытия нескольких терминалов в одном интерфейсе (включая Ubuntu, Debian, PowerShell, Azure CLI или любой вариант использования).
- Зарегистрируйтесь для получения идентификатора Docker в Docker Hub (необязательно).
- См. лицензионное соглашение Docker Desktop для обновления условий использования.
Дополнительные сведения см. в статье о требованиях к системе Docker для установки Docker Desktop в Windows.
Чтобы узнать, как установить Docker на Windows Server, см. статью "Начало работы: подготовка Windows для контейнеров".
Примечание.
WSL может запускать дистрибутивы в режиме WSL версии 1 или WSL 2. что можно проверить, открыв PowerShell и выполнив команду wsl -l -v
; Убедитесь, что для дистрибутива задано использование WSL 2, введя следующее: wsl --set-version <distro> 2
Замените <distro>
на имя дистрибутива (например, Ubuntu 18.04).
В WSL версии 1 из-за фундаментальных различий между Windows и Linux подсистема Docker не могла работать непосредственно внутри WSL, поэтому команда Docker разработала альтернативное решение с помощью виртуальных машин Hyper-V и LinuxKit. Однако, так как WSL 2 теперь работает на ядре Linux с полной емкостью системного вызова, Docker может полностью работать в WSL 2. Это означает, что контейнеры Linux могут работать изначально без эмуляции, что приводит к повышению производительности и взаимодействию между инструментами Windows и Linux.
Установка Docker Desktop
С помощью серверной части WSL 2, поддерживаемой в Docker Desktop для Windows, вы можете работать в среде разработки на основе Linux и создавать контейнеры на основе Linux, используя Visual Studio Code для редактирования кода и отладки, а также запускать контейнер в браузере Microsoft Edge в Windows.
Чтобы установить Docker (после установки WSL):
Скачайте Docker Desktop и следуйте инструкциям по установке.
После установки запустите Docker Desktop из Windows меню , а затем выберите значок Docker в меню скрытых значков панели задач. Щелкните правой кнопкой мыши значок, чтобы отобразить меню команд Docker и выберите "Параметры".
Убедитесь, что установлен флажок "Использовать подсистему на основе WSL 2" в разделе "Общие параметры>".
Выберите из установленных дистрибутивов WSL 2, которые необходимо включить интеграцию Docker, перейдя в раздел "Параметры>интеграции ресурсов>WSL".
Чтобы убедиться, что Docker установлен, откройте дистрибутив WSL (например, Ubuntu) и отобразите версию и номер сборки, введя следующее:
docker --version
Проверьте правильность работы установки, выполнив простой встроенный образ Docker с помощью:
docker run hello-world
Совет
Ниже приведены несколько полезных команд Docker, которые необходимо знать:
- Перечислить команды, доступные в интерфейсе командной строки Docker, можно, выполнив команду
docker
. - Просмотреть сведения о конкретной команде можно, выполнив команду
docker <COMMAND> --help
. - Перечислить образы Docker на вашем компьютере (сейчас только образ Hello-World) можно, используя следующие команды
docker image ls --all
. - Вывод списка контейнеров на компьютере с помощью:
docker container ls --all
илиdocker ps -a
(без флага -show all, будут отображаться только запущенные контейнеры). - Список системных сведений об установке Docker, включая статистику и ресурсы (ЦП и память), доступные вам в контексте WSL 2, с:
docker info
Разработка в удаленных контейнерах с помощью VS Code
Чтобы приступить к разработке приложений с помощью Docker с WSL 2, мы рекомендуем использовать VS Code вместе с расширениями WSL, Dev Containers и Docker.
Установите расширение WSL VS Code. Это расширение позволяет открывать проект Linux, работающий в WSL в VS Code (не нужно беспокоиться о проблемах пути, двоичной совместимости или других проблемах с кросс-ОС).
Установите расширение контейнеров разработки VS Code. Это расширение позволяет открывать папку проекта или репозиторий внутри контейнера, используя полный набор функций Visual Studio Code для выполнения разработки в контейнере.
Установите расширение Docker для VS Code. Это расширение добавляет функциональные возможности для создания, управления и развертывания контейнерных приложений из VS Code. (Вам нужно расширение "Контейнеры разработки", чтобы фактически использовать контейнер в качестве среды разработки.)
Давайте создадим контейнер разработки для существующего проекта приложения.
В этом примере мы будем использовать исходный код из руководства по Hello World для Django в среде разработки Python. Этот шаг можно пропустить, если вы предпочитаете использовать собственный исходный код проекта. Чтобы скачать веб-приложение HelloWorld-Django из GitHub, откройте терминал WSL (например, Ubuntu) и введите:
git clone https://github.com/mattwojo/helloworld-django.git
Примечание.
Всегда храните код в той же файловой системе, в которую вы используете средства. Это приведет к повышению производительности доступа к файлам. В этом примере мы используем дистрибутив Linux (Ubuntu) и хотим хранить файлы проекта в файловой системе
\\wsl\
WSL. Хранение файлов проекта в файловой системе Windows значительно замедлит работу при использовании средств Linux в WSL для доступа к этим файлам.В терминале WSL измените каталоги на папку исходного кода для этого проекта:
cd helloworld-django
Откройте проект в VS Code, запущенном на локальном сервере расширений WSL, введя следующее:
code .
Убедитесь, что вы подключены к дистрибутиву WSL Linux, проверив зеленый удаленный индикатор в левом нижнем углу экземпляра VS Code.
В палитре команд VS Code (CTRL+SHIFT+P) введите: Контейнеры разработки: повторно откройте контейнеры , так как мы используем папку, уже открываемую с помощью расширения WSL. Кроме того, используйте контейнеры разработки: открыть папку в контейнере... , чтобы выбрать папку WSL с помощью локальной
\\wsl$
общей папки (с стороны Windows). Дополнительные сведения см. в кратком руководстве по Visual Studio Code : откройте существующую папку в контейнере . Если эти команды не отображаются при вводе, убедитесь, что вы установили расширение "Контейнеры разработки", связанное выше.Выберите папку проекта, которую вы хотите контейнеризировать. В моем случае это
\\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\
Появится список определений контейнеров, так как в папке проекта (репозиторий) еще нет конфигурации контейнера разработки. Список отображаемых определений конфигурации контейнера фильтруется на основе типа проекта. Для своего проекта Django я буду выбирать Python 3.
Новый экземпляр VS Code откроется, начнет создание нового образа и после завершения сборки запустит наш контейнер. Вы увидите, что новая
.devcontainer
папка появилась с сведениями о конфигурации контейнера внутриDockerfile
иdevcontainer.json
файла.Чтобы убедиться, что проект по-прежнему подключен как к WSL, так и в контейнере, откройте интегрированный терминал VS Code (CTRL+SHIFT+~). Проверьте операционную систему, введя:
uname
и версию Python:python3 --version
Вы можете увидеть, что имя uname вернулось как Linux, поэтому вы все еще подключены к подсистеме WSL 2, а номер версии Python будет основан на конфигурации контейнера, которая может отличаться от версии Python, установленной в дистрибутиве WSL.Чтобы запустить и отладить приложение внутри контейнера с помощью Visual Studio Code, сначала откройте меню "Выполнить " (CTRL+SHIFT+D или выберите вкладку в строке меню слева). Затем выберите команду "Выполнить и отладить ", чтобы выбрать конфигурацию отладки и выбрать конфигурацию, которая лучше всего подходит для вашего проекта (в моем примере это будет "Django"). Будет создан
launch.json
файл в папке.vscode
проекта с инструкциями по запуску приложения.В VS Code выберите запуск>отладки (или просто нажмите клавишу F5). Откроется терминал в VS Code, и вы увидите результат: "Запуск сервера разработки на http://127.0.0.1:8000/ сервере с помощью CONTROL-C". Удерживайте клавишу CONTROL и выберите адрес, отображаемый для открытия приложения в веб-браузере по умолчанию, и просмотрите проект, запущенный внутри своего контейнера.
Теперь вы успешно настроили контейнер удаленной разработки с помощью Docker Desktop на базе серверной части WSL 2, которую можно кодировать, выполнять, запускать, развертывать или отлаживать с помощью VS Code!
Устранение неполадок
Устаревший контекст docker WSL
Если вы использовали ранний технический просмотр Docker для WSL, у вас может быть контекст Docker под названием wsl, который теперь устарел и больше не используется. Вы можете проверить команду: docker context ls
Вы можете удалить этот контекст wsl, чтобы избежать ошибок с командой: docker context rm wsl
так как вы хотите использовать контекст по умолчанию для Windows и WSL2.
Возможные ошибки, которые могут возникнуть при использовании этого устаревшего контекста wsl: docker wsl open //./pipe/docker_wsl: The system cannot find the file specified.
error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_wsl/v1.40/images/json?all=1: open //./pipe/docker_wsl: The system cannot find the file specified.
Дополнительные сведения об этой проблеме см. в статье о настройке Docker в Системе Windows для Linux (WSL2) в Windows 10.
Проблемы с поиском папки хранилища образов Docker
Docker создает две папки дистрибутива для хранения данных:
- \wsl$\docker-desktop
- \wsl$\docker-desktop-data
Эти папки можно найти, открыв дистрибутив WSL Linux и введя следующее: explorer.exe .
чтобы просмотреть папку в Windows проводник. Введите: \\wsl\<distro name>\mnt\wsl
замена <distro name>
имени дистрибутива (т. е. Ubuntu-20.04) для просмотра этих папок.
Дополнительные сведения о поиске расположений хранилища docker в WSL см. в этой проблеме из репозитория WSL или этой записи StackOverflow.
Дополнительные сведения об устранении неполадок в WSL см. в документации по устранению неполадок.
Дополнительные ресурсы
- Документация Docker: рекомендации по Docker Desktop с WSL 2
- Отзывы о Docker Desktop для Windows: отправка проблемы
- Блог VS Code: рекомендации по выбору среды разработки
- Блог VS Code: использование Docker в WSL 2
- Блог VS Code: использование удаленных контейнеров в WSL 2
- Hanselminutes Podcast: Сделать Docker прекрасным для разработчиков с Саймоном Ферклом
Windows Subsystem for Linux