- Using Docker in WSL 2
- How it works
- Getting set up
- Using VS Code
- We want your feedback
- Начало работы с удаленными контейнерами Docker в WSL 2
- Общие сведения о контейнерах Docker
- Предварительные требования
- Установка Docker Desktop
- Разработка в удаленных контейнерах с помощью VS Code
- Устранение неполадок
- Нерекомендуемый контекст DOCKER WSL
- Не удается найти папку хранилища образов DOCKER
Using Docker in WSL 2
March 2, 2020 by Matt Hernandez, @fiveisprime
Last June, the Docker team announced that they will be investing in getting Docker running with the Windows Subsystem for Linux (WSL). All of this is made possible with the recent changes to the architecture of WSL to run within a lightweight virtual machine (VM), which we talked about in an earlier blog post about WSL 2. Since this announcement, the Docker team has released a Technical Preview of Docker that includes support for running with WSL 2.
This article explains how the Docker Desktop technical preview works as well as how to use the Docker extension with the technical preview.
How it works
This new Docker architecture works a lot like Visual Studio Code’s WSL remote development support in that the Docker CLI running on the host machine executes commands within the Docker Integration Package, which runs on the remote WSL VM.
Image credit: Docker Engineering
DockerD runs directly within WSL so there’s no need for the Hyper-V VM and all Linux containers run within the Linux userspace on Windows for improved performance and compatibility.
Getting set up
First some prerequisites:
- Install Windows 10 Insider Preview build 18975 (Slow) or later for WSL 2.
- Install Ubuntu from the Microsoft store.
- Enable WSL 2 by following this guide.
- Install the Remote — WSL extension for VS Code.
- Install the Docker WSL 2 Technical Preview.
Once installed, Docker will recognize that you have WSL installed and prompt to enable WSL integration. You want to Enable WSL integration for this tutorial.
This option will allow you to access Docker Desktop via the Docker CLI directly from within your Linux distro.
If you have multiple Linux distros, make sure you only have WSL integration turned on for the correct one in your Docker settings:
With that configured, all commands will execute in the Linux context — this includes Docker commands run from PowerShell so running something like docker run mongo… will start a Linux container within the WSL VM.
Running the docker ps command over in WSL, you’ll see the container as expected. Notice that the container ID matches.
Using VS Code
With this set up and running, you can install the VS Code Docker extension and access your containers. If you’re already running WSL 2 and the Remote — WSL extension, this will help you get Docker integrated into your WSL workflow rather than switching contexts when you need containers. And because the Docker CLI’s context is set to use DockerD in WSL, the extension will work with your containers regardless of whether you opened VS Code using the Remote — WSL extension.
Notice how in the screenshot below, I’m connected and working in WSL and still building/running containers without changing from my preferred environment (zsh in Ubuntu).
Theme: Noctis Sereno
I’ve personally noticed a vast improvement in container execution times using this configuration and each part of my typical development workflow remains the same. I’m also using the Remote — Containers extension within WSL for testing specific environments without setting things up directly on my machine.
We want your feedback
Keep in mind that you’re using prerelease software and, while the Windows Insiders Slow ring is very stable, you may run into some issues. If you do find something that isn’t working as expected, please open an issue via the Feedback tool in Windows. Any direct Docker issues or feedback can be logged in the Docker for Windows repo.
Matt Hernandez, VS Code Program Manager @fiveisprime
Источник
Начало работы с удаленными контейнерами Docker в WSL 2
это пошаговое руководство поможет приступить к разработке с помощью удаленных контейнеров, настроив для Windows WSL 2 (подсистема Windows для Linux версии 2).
docker Desktop для Windows предоставляет среду разработки для создания, доставки и запуска приложений пакетных. включив модуль на основе WSL 2, вы можете запускать контейнеры Linux и Windows в docker Desktop на одном компьютере. (для личного использования и малых предприятий вы можете использовать docker Desktop. дополнительные сведения о Pro, команде или ценах на веб-узел dockerсм. на странице «вопросы и ответы» для филиалов).
Общие сведения о контейнерах 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(необязательно).
WSL может запускать дистрибутивы в режиме WSL версии 1 или WSL 2. Это можно проверить, открыв PowerShell и введя: wsl -l -v . Убедитесь, что дистрибутив настроен на использование WSL 2, введя: wsl —set-version 2 . Замените на имя дистрибутив (например, Ubuntu 18,04).
в WSL версии 1 из-за фундаментальных различий между Windows и Linux подсистема docker не смогла запуститься непосредственно внутри WSL, поэтому группа docker разработала альтернативное решение с использованием виртуальных машин Hyper-V и линукскит. Однако поскольку 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 integration.
Чтобы убедиться, что DOCKER установлен, откройте дистрибутив WSL (например, Ubuntu) и отобразите версию и номер сборки, введя следующее: docker —version
Проверьте, правильно ли работает установка, выполнив простой встроенный образ DOCKER с помощью: docker run hello-world
Вот несколько полезных команд DOCKER для получения сведений:
- Перечислить команды, доступные в интерфейсе командной строки Docker, можно, выполнив команду docker .
- Просмотреть сведения о конкретной команде можно, выполнив команду docker —help .
- Перечислить образы Docker на вашем компьютере (сейчас только образ Hello-World) можно, используя следующие команды docker image ls —all .
- Перечислите контейнеры на компьютере с помощью: docker container ls —all или docker ps -a (без флага Показать все, будут отображаться только выполняющиеся контейнеры).
- Перечислите системную информацию об установке 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.
В этом примере я использую исходный код из руководства по 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 измените каталоги на папку исходного кода для этого проекта:
откройте проект в VS Code, работающем на локальном сервере расширений Remote-WSL, введя следующее:
убедитесь, что вы подключены к WSL Linux дистрибутив, проверив зеленый индикатор зеленого цвета в левом нижнем углу экземпляра VS Code.
в VS Code команде паллетте (Ctrl + Shift + P) введите: Remote-containers: Open Folder in контейнер. Если эта команда не отображается при вводе, убедитесь, что вы установили расширение удаленного контейнера, связанное выше.
Выберите папку проекта, которую вы хотите контейнеризовать. В моем случае это \\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». Удерживайте нажатой клавишу CTRL и выберите отображаемый адрес, чтобы открыть приложение в веб-браузере по умолчанию и просмотреть проект, работающий в контейнере.
Вы успешно настроили удаленный контейнер разработки с помощью 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
DOCKER создает две папки дистрибутив для хранения данных:
- \WSL $ \доккер-десктоп
- \WSL $ \доккер-десктоп-Дата
эти папки можно найти, открыв дистрибутив WSL Linux и введя: explorer.exe . для просмотра папки в Windows проводнике. Введите: \\wsl\ \mnt\wsl замените именем вашего распространения (IE. Ubuntu-20,04) для просмотра этих папок.
Дополнительные сведения о поиске расположений хранилищ DOCKER в WSL см. в этой статье из РЕПОЗИТОРИЯ WSL или этой стакковерлов записи.
Дополнительные сведения об устранении общих проблем в WSL см. в документации по устранению неполадок .
Источник