Введение
Каждый разработчик вынужден настраивать для себя среду разработки. Любую среду разработки можно условно разделить на две группы:
Простая - когда не требуется дополнительная конфигурация ОС, набор библиотек установленных в ОС соответствует требованиям разработки, мощности ПК разработчика полностью соответствуют решаемым задачам в процессе разработки.
Не простая - когда ваша конфигурация среды разработки не соответствует первому пункту.
Статья описывает как решить проблемы, возникающие с непростыми средами разработки, с помощью контейнеризации среды разработки.
Виртуальные машины против контейнеров
Распространённым способом решения проблем с конфигурацией среды разработки является использование виртуальных машин.
Виртуальные машины эмулируют полный виртуальный компьютер с отдельной операционной системой, включая собственное ядро. Это даёт полное управление средой и изоляцию на аппаратном уровне, что важно для тестирования разных ОС и конфигураций, сложных системных задач, а также для безопасной изоляции. ВМ требуют больше ресурсов, дольше запускаются и занимают больше места, но дают гибкость работы с разными операционными системами на одном хосте, удобны для комплексного тестирования и обеспечивают дополнительные уровни безопасности.
Контейнеры изолируют приложения на уровне процессов операционной системы, совместно используя ядро ОС хоста. Это позволяет контейнерам занимать намного меньше ресурсов, быстро запускаться и обеспечивать высокую скорость разработки и обновления.
Если говорить упрощённо, то контейнеризация является облегченной версией виртуализации.
Если для конфигурации среды разработки вам требуется 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)

AndrewStephanoff
14.10.2025 11:13Если вы используете разработку внутри контейнера, то логичным было бы поддержка технологии devcontainer https://code.visualstudio.com/docs/devcontainers/containers
garwall
На это дело можно было придумать что-то поинтереснее чем "я установил ссх в контейнер" (и да, 22 порт уже скорее всего занят на хосте будет, так что...) - например, тот же ремоут-сокет докеровский, чтобы управлять, билдить, етц удаленный контейнер прямо со своего хоста.