Введение

Каждый разработчик вынужден настраивать для себя среду разработки. Любую среду разработки можно условно разделить на две группы:

  • Простая - когда не требуется дополнительная конфигурация ОС, набор библиотек установленных в ОС соответствует требованиям разработки, мощности ПК разработчика полностью соответствуют решаемым задачам в процессе разработки.

  • Не простая - когда ваша конфигурация среды разработки не соответствует первому пункту.

Статья описывает как решить проблемы, возникающие с непростыми средами разработки, с помощью контейнеризации среды разработки.

Виртуальные машины против контейнеров

Распространённым способом решения проблем с конфигурацией среды разработки является использование виртуальных машин.

Виртуальные машины эмулируют полный виртуальный компьютер с отдельной операционной системой, включая собственное ядро. Это даёт полное управление средой и изоляцию на аппаратном уровне, что важно для тестирования разных ОС и конфигураций, сложных системных задач, а также для безопасной изоляции. ВМ требуют больше ресурсов, дольше запускаются и занимают больше места, но дают гибкость работы с разными операционными системами на одном хосте, удобны для комплексного тестирования и обеспечивают дополнительные уровни безопасности.

Контейнеры изолируют приложения на уровне процессов операционной системы, совместно используя ядро ОС хоста. Это позволяет контейнерам занимать намного меньше ресурсов, быстро запускаться и обеспечивать высокую скорость разработки и обновления.

Если говорить упрощённо, то контейнеризация является облегченной версией виртуализации.

Если для конфигурации среды разработки вам требуется Linux, версия ядра не важна или совпадает с версией ОС рабочего ПК, то вы можете обойтись без виртуальной машины используя технологию контейнеризации.

Дополнительные плюсы для проектных команд

Кроме плюсов для каждого отдельного разработчика, есть преимущества для команд разработки:

  • Контейнеры используются как полноценная среда разработки, что позволяет точно воспроизводить и разделять одну и ту же конфигурацию окружения между всеми участниками проекта. Это устраняет проблему "у меня работает, а у тебя нет" и обеспечивает стабильность среды разработки независимо от локальных настроек компьютеров разработчиков.

  • Зн��чительно упрощается масштабирование разработки и её управление, так как окружение можно централизованно настраивать, обновлять и резервировать. Это также помогает новичкам быстро включаться в проект без сложных локальных настроек.

Контейнеры и IDE

Интеграция контейнеров с IDE значительно улучшает опыт разработки, позволяя работать с контейнеризированными приложениями прямо из среды разработки.

Многие современные IDE, VS Code, JetBrains, Eclipse, NetBeans, имеют плагины или встроенную поддержку Docker, обеспечивая интеграцию с контейнерными технологиями, управление образами и контейнерами, а также возможность отладки кода внутри контейнера.

Использование SSH

Поддержка удалённой разработки в IDE через SSH предоставляет возможность работать с проектами, расположенными на удалённых серверах, как если бы они были локальными.

Популярными IDE, которые поддерживают удалённую разработку через SSH (Remote SSH), являются VS Code и JetBrains.

Также можно использовать консольные IDE. Например, мой коллега устанавливает в образ NeoVim и прекрасно себя чувствует.

Преимущество разработки в контейнерах через Remote SSH заключается в удобстве, гибкости и эффективности, которые он обеспечивает для разработчиков:

  • Remote SSH позволяет подключаться к удалённому серверу с контейнерами без необходимости установки Docker или других инструментов локально. Это особенно полезно, если мощность локального ПК ограничена или проект требует специфичного Linux-окружения.

  • Можно легко подключиться к контейнеру на удалённом хосте, управлять им и работать с исходным кодом с помощью привычных возможностей IDE — IntelliSense, отладка, навигация по коду и пр. При этом весь код остаётся на удалённой машине, а IDE работает как клиент.

  • Возможность использовать более мощный удалённый сервер (с CPU, RAM, GPU) для разработки и тестирования, оставляя локальную машину свободной и не нагруженной.

  • Важным фактором является безопасность — код и данные не покидают удалённый сервер, что снижает риски утечки данных или повреждения ПК разработчика.

Итого, развёртывание разработки в контейнерах через Remote SSH — это способ получить консистентное, мощное, безопасное и удобное окружение, объединяющее преимущества контейнеризации и возможности IDE для удалённой разработки.

Создание образа с поддержкой SSH

Поддержка SSH в образе реализуется просто:

  • Необходимо установить в образ сервер SSH

RUN apt-get update && apt-get install openssh-server -y
  • Необходимо прописать порт в образе для ssh, запустить ssh сервер при старте контейнера как службу

EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

Примеры моих Docker конфигураций образов для разработки
https://github.com/abaula/MixedCode/tree/master/bash/docker/developer_img_ssh_git

Выводы

Использование SSH и контейнеров для разработки имеет следующие преимущества:

  • Работа с исходным кодом и инструментами разработки происходит по выбору на локальном ПК или удалённом сервере без необходимости переконфигурации.

  • Локальная машина выступает как интерфейс к среде разработки, которая изолирована от IDE и может работать как локально так и на удаленном сервере.

  • Унификация рабочих сред, возможность быстрого переключения между проектами в разных контейнерах и на разных серверах.

  • Защищённое подключение через SSH с использованием ключей, что упрощает настройку доступа в контейнер.

  • Сохранение всех настроек и расширений в контейнере.

Комментарии (3)


  1. garwall
    14.10.2025 11:13

    На это дело можно было придумать что-то поинтереснее чем "я установил ссх в контейнер" (и да, 22 порт уже скорее всего занят на хосте будет, так что...) - например, тот же ремоут-сокет докеровский, чтобы управлять, билдить, етц удаленный контейнер прямо со своего хоста.


  1. AndrewStephanoff
    14.10.2025 11:13

    Если вы используете разработку внутри контейнера, то логичным было бы поддержка технологии devcontainer https://code.visualstudio.com/docs/devcontainers/containers


    1. antonb73 Автор
      14.10.2025 11:13

      Заголовок статьи... Пожалуйста прочитайте.