Используйте 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, вы можете легко настроить согласованную среду для нескольких разработчиков, сократить время установки и безопасным образом уменьшить количество ошибок, возникающих из-за различий в средах разработки.