Этот туториал рассчитан на людей, которые недавно вошли в коммерческую разработку и только начинают свою трудовую деятельность. Не исключаю, что ветеранам он также может быть полезен.
Для того, чтобы вести разработку на удаленной машине в Docker-контейнере, необходимо:
Иметь удаленный доступ по протоколу SSH к машине с ОС Ubuntu
Иметь установленный Docker на удаленной машине
Установленный VSСode на локальной машине
Настроенный доступ по протоколу SSH к github
Копия репозитория на удаленной машине, сделанная через
git clone
В нашем примере п.5 будет fork от pytorch-lightning. Я буду работать через mac OS.
Для работы в контейнере на удаленной машине, нужно сделать следующее:
Открыть на локальной машине редактор VSСode и установить расширение Remote Development. В результате должны появиться следующие компоненты (нам потребуются первые два):
- Remote Containers или Dev Containers - инструменты для разработки внутри Docker-контейнера
- Remote - SSH - инструменты для разработки на удаленной машине с обменом данных по протоколу SSH
- WSL - расширение для работы в Linux-среде через Windows (Windows Subsystem for Linux)Подключиться через SSH к удаленной машине через VSСode. Для этого выберем
Command Palette
из менюView
, вводим>
и выбираем командуRemote SSH: Connect to Host...
.После этого необходимо выбрать хост или ввести команду, по которой вы подключаетесь в терминале.
Если нужного хоста нет, необходимо также указать расположение конфигурации SSH-клиента. Обычно, это
~/.ssh/config
После настройки можно зайти на машину через IDE
Открыть репозиторий через Docker-контейнер. Для этого:
- Зайдем в репозиторий- Создаем папку
.devcontainer
- Создаем файлыdevcontainer.json
иDockerfile.dev
.devcontainer.json
хранит метаданные для настройки окружения для разработки в виде словаря. Подробнее можно почитать здесь. Потребуются следующие параметры:
-name
- имя проекта, которое будет отображаться в самом редакторе. В текущем примере этоi.lucky_dev_lightning
-context
- контекст, в котором будет идти разработка (иными словами, репозиторий, который будет корневым). В текущем примере, это просто..
(уходим на уровень выше папки.devcontainer
)
-dockerFile
- имя docker-файла, по которому будет создаваться образ → сам контейнер. В текущем примере этоDockerfile.dev
.
-extensions
- перечень расширений, которые необходимы для работы над проектом. Более детально про расширения можно посмотреть здесь. Имена расширений здесь имеют следующий вид:
<EXTENSION_NAME>@<VERSION>
Здесь важно фиксировать версию каждого расширения, потому что может случиться неожиданная ситуация, в результате которой работа может затянутся (встроенный линтер внезапно начнет выдавать ошибки, которых раньше не было, тесты не начнут заводиться из редактора и пр.). Обычно для работы с проектами наPython
я использую следующий набор расширений:[ "ms-python.python@2022.18.2", // для работы на Python "eamodio.gitlens@12.1.1", // надстройка для работы с git "GrapeCity.gc-excelviewer@4.2.55", // редактор таблиц "njpwerner.autodocstring@0.6.1", // автодобавление docsting "KevinRose.vsc-python-indent@1.17.0", // автовыравнивание "RobbOwen.synthwave-vscode@0.1.14", // просто цветовая схема (можно не брать) "kaih2o.python-resource-monitor@0.1.9" // мониторинг использования RAM/CPU (можно не брать) ]
-
runArgs
- список параметров, которые будут использовать для командыrun
контейнера. В текущем примере я использую:[ "--name", "i.lucky_dev_lightning" ]
-
remoteUser
- заданиеnon-root
пользователя такого же, который используется Вами на удаленной машине.Выбрать
Command Palette
из менюView
, вводим>
и выбираем командуRemote-Containers: Open Folder in Container...
Подождать, пока соберется контейнер
После успешной сборки образа и запуска контейнера можно открыть терминал и убедиться по командной строке, что мы в контейнере
Обратите внимание на название проекта (в IDE) и на название контейнера (через
docker ps -a
). Теперь проще ориентироваться среди запущенных контейнеров и среди нескольких проектов на VSСode.Profit!=)
Если туториал окажется полезен/недостает деталей, пишите, буду рад обратной связи! Есть также мысли сделать похожие туториалы на других ОС (Ubuntu, Windows 11).