СправошнаяПоиск

Начало работы с удаленными контейнерами 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 в Microsoft Learn.

Предварительные требования

  • Убедитесь, что компьютер работает Windows 10, обновлен до версии 2004, сборки 18362 или выше.
  • Установите WSL и настройте имя пользователя и пароль для дистрибутива Linux, работающего в WSL 2.
  • Установите Visual Studio Code(необязательно). Это обеспечит оптимальное взаимодействие, включая возможность написания кода и отладки в удаленном контейнере Docker и подключении к дистрибутиву Linux.
  • Установите Терминал Windows(необязательно). Это обеспечит оптимальный интерфейс, включая возможность настройки и открытия нескольких терминалов в одном интерфейсе (включая Ubuntu, Debian, PowerShell, Azure CLI или любой другой вариант использования).
  • Зарегистрируйтесь для получения идентификатора Docker по адресу Docker Hub(необязательно).
  • Сведения об обновлениях условий использования см. в лицензионном соглашении Docker Desktop .

Примечание

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):

  1. Скачайте Docker Desktop и следуйте инструкциям по установке.

  2. После установки запустите Docker Desktop из Windows меню , а затем выберите значок Docker в меню скрытых значков панели задач. Щелкните правой кнопкой мыши значок, чтобы открыть меню команд Docker и выбрать пункт "Параметры". Docker Desktop dashboard icon

  3. Убедитесь, что установлен флажок "Использовать подсистему на основе WSL 2" в Параметры>General. Docker Desktop general settings

  4. Выберите из установленных дистрибутивов WSL 2, для которых требуется включить интеграцию Docker, перейдя к следующим компонентам: Параметры>ResourcesWSL>Integration. Docker Desktop resource settings

  5. Чтобы убедиться, что Docker установлен, откройте дистрибутив WSL (например, Ubuntu) и отобразите версию и номер сборки, введя следующую команду: docker --version

  6. Проверьте правильность работы установки, запустив простой встроенный образ 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 (без флага -a show all, будут отображаться только запущенные контейнеры).
  • Вывод списка системных сведений об установке Docker, включая статистику и ресурсы (память ЦП & ), доступные в контексте WSL 2, с помощью следующих средств: docker info

Разработка в удаленных контейнерах с помощью VS Code

Чтобы приступить к разработке приложений с помощью Docker с WSL 2, рекомендуется использовать VS Code, а также расширение Remote-WSL и Docker.

  • Установите расширение VS Code Remote-WSL. Это расширение позволяет открывать проект Linux, работающий в WSL в VS Code (не нужно беспокоиться о проблемах с путем, совместимости двоичных файлов или других проблемах, связанных с несколькими ОС).

  • Установите расширение vs code Remote-Containers. Это расширение позволяет открывать папку проекта или репозиторий в контейнере, используя полный набор функций Visual Studio Code для выполнения разработки в контейнере.

  • Установите VS Code расширение Docker. Это расширение добавляет функциональные возможности для создания, управления и развертывания контейнерных приложений из VS Code. (Для фактического использования контейнера в качестве среды разработки требуется расширение Remote-Container.)

Давайте создадим контейнер разработки для существующего проекта приложения с помощью Docker.

  1. В этом примере мы будем использовать исходный код из моего руководства по Hello World для Django в среде разработки Python, настроенной документацией. Этот шаг можно пропустить, если вы предпочитаете использовать собственный исходный код проекта. Чтобы скачать веб-приложение HelloWorld-Django из GitHub, откройте терминал WSL (например, Ubuntu) и введите:git clone github.com/mattwojo/helloworld-django.git

    Примечание

    Всегда храните код в той же файловой системе, в которую вы используете средства. Это приведет к повышению производительности доступа к файлам. В этом примере мы используем дистрибутив Linux (Ubuntu) и хотим хранить файлы проекта в файловой системе \\wsl\WSL. Хранение файлов проекта в файловой системе Windows значительно замедлит работу при использовании средств Linux в WSL для доступа к этим файлам.

  2. В окне терминала WSL перейдите в папку исходного кода для этого проекта:

    Bash

  •     cd helloworld-django 
  • Откройте проект в VS Code, запущенном на локальном сервере расширений Remote-WSL, введя следующее:

    Bash

  1.     code . 

    Убедитесь, что вы подключены к дистрибутиву WSL Linux, проверив зеленый удаленный индикатор в левом нижнем углу экземпляра VS Code.

    VS Code WSL Remote indicator

  2. В VS Code команде поддонте (CTRL+SHIFT+P) введите: Remote-Containers: Open Folder in Container... Если эта команда не отображается по мере ввода, убедитесь, что вы установили расширение удаленного контейнера, связанное выше.

    VS Code Remote Container command

  3. Выберите папку проекта, которую вы хотите контейнеризировать. В моем случае, это \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    VS Code Remote Container folder

  4. Появится список определений контейнеров, так как в папке проекта (репозитории) еще нет конфигурации DevContainer. Список отображаемых определений конфигурации контейнера фильтруется по типу проекта. Для проекта Django я выберу Python 3.

    VS Code Remote Container config definitions

  5. Откроется новый экземпляр VS Code, начнется создание нового образа, и после завершения сборки запустится наш контейнер. Вы увидите, что новая .devcontainer папка появилась с информацией о конфигурации контейнера в Dockerfile файле и devcontainer.json файле.

    VS Code .devcontainer folder

  6. Чтобы убедиться, что проект по-прежнему подключен к WSL и в контейнере, откройте интегрированный терминал VS Code (CTRL+SHIFT+~). Проверьте операционную систему, введя: uname и версию Python с помощью: python3 --version. Вы увидите, что имя uname вернулось как Linux, поэтому вы все еще подключены к подсистеме WSL 2, и номер версии Python будет основан на конфигурации контейнера, которая может отличаться от версии Python, установленной в дистрибутиве WSL.

  7. Чтобы запустить и отладить приложение внутри контейнера с помощью Visual Studio Code, сначала откройте меню "Выполнить" (CTRL+SHIFT+D или выберите вкладку в строке меню слева). Затем выберите команду "Запуск и отладка ", чтобы выбрать конфигурацию отладки и выбрать конфигурацию, которая лучше всего подходит для проекта (в моем примере это будет "Django"). Вы создадите launch.json файл в папке .vscode проекта с инструкциями по запуску приложения.

    VS Code run debug configuration

  8. В VS Code выберите команду RunStart>debugging (или просто нажмите клавишу F5). Откроется терминал в VS Code, и вы увидите результат: "Запуск сервера разработки на http://127.0.0.1:8000/ выходе из сервера с control-C". Удерживайте клавишу CONTROL и выберите адрес, отображаемый для открытия приложения в веб-браузере по умолчанию, и просмотрите проект, запущенный в контейнере.

    VS Code running a docker container

Теперь вы успешно настроили контейнер удаленной разработки с помощью 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 %2F%2F.%2Fpipe%2Fdocker_wsl/v1.40/images/json: open //./pipe/docker_wsl: The system cannot find the file specified.

Проблемы с поиском папки хранилища образов 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 или этой записи StackOverlow.

Дополнительные сведения об устранении общих неполадок в WSL см. в документации по устранению неполадок .