Поиск по сайту:

Используйте VS Code для разработки в контейнерах


Обеспечьте согласованность, чтобы избежать проблем, когда над одним проектом работают несколько разработчиков.

Несоответствия в кодировании и тестировании представляют собой риск, если над проектом работают несколько разработчиков с разными средами разработки. Visual Studio Code (VS Code) — это интегрированная среда разработки (IDE), которая помогает минимизировать эти проблемы. Его можно комбинировать с контейнерами, чтобы обеспечить отдельные среды разработки для каждого приложения наряду с единой средой разработки.

Расширение VS Code Remote — Containers позволяет определить контейнер, использовать это определение для его создания и разрабатывать внутри контейнера. Это определение контейнера можно зарегистрировать в репозитории исходного кода вместе с кодом приложения, что позволяет всем разработчикам использовать одно и то же определение для сборки и разработки внутри контейнера.

По умолчанию расширение Remote — Containers использует Docker для сборки и запуска контейнера, но для среды выполнения контейнеров легко использовать Podman, который позволяет использовать контейнеры без root-прав.

В этой статье вы узнаете, как настроить разработку внутри контейнера без root-доступа с помощью Podman с VS Code и расширения Remote — Containers.

Начальная конфигурация

Прежде чем продолжить, убедитесь, что ваша рабочая станция Red Hat Enterprise Linux (RHEL) или Fedora обновлена с учетом последних ошибок и что установлены VS Code и расширение Remote — Containers. (Дополнительную информацию об установке см. на веб-сайте VS Code.)

Затем установите Podman и поддерживающие его пакеты с помощью простой команды dnf install:

$ sudo dnf install -y podman

После установки Podman настройте VS Code для использования исполняемого файла Podman (вместо Docker) для взаимодействия с контейнером. В VS Code перейдите в раздел Файл > Настройки > Настройки и щелкните значок > рядом с элементом Расширения. В появившемся раскрывающемся меню выберите Удаленное управление — Контейнеры и прокрутите вниз, чтобы найти параметр Удаленное управление > Контейнеры: Путь Docker. В текстовом поле замените docker на podman.

(Брант Эванс, CC BY-SA 4.0)

Теперь, когда настройки завершены, создайте и откройте новую или существующую папку для проекта в VS Code.

Определить контейнер

В этом руководстве используется пример создания контейнера для разработки на Python 3.

Расширение Remote - Containers позволяет добавлять в папку проекта необходимые файлы базовой конфигурации. Чтобы добавить эти файлы, откройте панель команд, введя Ctrl+Shift+P на клавиатуре, найдите Remote-Containers: Add Development Container Configuration Files и выберите его.

(Брант Эванс, CC BY-SA 4.0)

В следующем всплывающем окне определите тип среды разработки, которую вы хотите настроить. В этом примере конфигурации найдите определение Python 3 и выберите его.

(Брант Эванс, CC BY-SA 4.0)

Затем выберите версию Python, которая будет использоваться в контейнере. Выберите параметр 3 (по умолчанию), чтобы использовать последнюю версию.

(Брант Эванс, CC BY-SA 4.0)

Конфигурация Python также может установить Node.js, но в этом примере снимите флажок «Установить Node.js» и нажмите «ОК».

(Брант Эванс, CC BY-SA 4.0)

Будет создана папка .devcontainer, содержащая файлы с именами devcontainer.json и Dockerfile. VS Code автоматически открывает файл devcontainer.json, чтобы вы могли его настроить.

Включить контейнеры без root-прав

В дополнение к очевидным преимуществам безопасности, одной из других причин запуска контейнера без root-доступа является то, что все файлы, созданные в папке проекта, будут принадлежать правильному идентификатору пользователя (UID) за пределами контейнера. Чтобы запустить контейнер разработки как контейнер без root-прав, измените файл devcontainer.json, добавив в его конец следующие строки:

"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,Z",
"workspaceFolder": "/workspace",

"runArgs": ["--userns=keep-id"],
"containerUser": "vscode"

Эти параметры сообщают VS Code смонтировать рабочую область с соответствующим контекстом SELinux, создать пространство имен пользователя, которое сопоставляет ваши UID и GID с теми же значениями внутри контейнера, и использовать vscode в качестве вашего имени пользователя внутри контейнера. Файл devcontainer.json должен выглядеть следующим образом (не забудьте поставить запятые в конце строк, как указано):

(Брант Эванс, CC BY-SA 4.0)

Теперь, когда вы настроили конфигурацию контейнера, вы можете его собрать и открыть внутри него рабочую область. Снова откройте палитру команд (с помощью Ctrl+Shift+P) и найдите Remote-Containers: Rebuild and Reopen in Container. Нажмите на нее, и VS Code начнет собирать контейнер. Сейчас самое время сделать перерыв (и выпить любимый напиток), поскольку сборка контейнера может занять несколько минут.

(Брант Эванс, CC BY-SA 4.0)

После завершения сборки контейнера проект откроется внутри контейнера. Файлы, созданные или отредактированные внутри контейнера, будут отражены в файловой системе за пределами контейнера с применением к файлам соответствующих разрешений пользователя. Теперь вы можете продолжить разработку внутри контейнера. VS Code может даже переносить ваши ключи SSH и конфигурацию Git в контейнер, чтобы код фиксации работал так же, как и при редактировании вне контейнера.

Следующие шаги

Теперь, когда вы завершили базовую настройку и настройку, вы можете еще больше повысить полезность конфигурации. Например:

  • Измените файл Dockerfile, чтобы установить дополнительное программное обеспечение (например, необходимые модули Python).
  • Используйте настроенный образ контейнера. Например, если вы занимаетесь разработкой Ansible, вы можете использовать набор инструментов Ansible от Quay.io. (Обязательно добавьте пользователя vscode в образ контейнера через Dockerfile.)
  • Зафиксируйте файлы из каталога .devcontainer в репозитории исходного кода, чтобы другие разработчики могли воспользоваться преимуществами определения контейнера для своих усилий по разработке.

Разработка внутри контейнера помогает предотвратить конфликты между различными проектами, сохраняя зависимости и код для каждого отдельно. Вы можете использовать Podman для запуска контейнеров в среде без root-доступа, что повышает безопасность. Объединив VS Code, расширение Remote - Containers и Podman, вы можете легко настроить согласованную среду для нескольких разработчиков, сократить время установки и безопасным образом уменьшить количество ошибок, возникающих из-за различий в средах разработки.

Статьи по данной тематике: