Email or username:

Password:

Forgot your password?
Top-level
Андрей Ситник

В контейнере я на всякий случай выключаю post-install скрипты в pnpm. Это не абсолютная защиты (ещё есть импорты, плагины для ESLint и т. п.), но лучше явно запускать скрипты зависимостей, добавив инструкцию в README.md.

github.com/ai/environment/blob

У меня есть скрипт для сборки Dockerfile в образ с тегом localhost/ai-opensource.
github.com/ai/environment/blob

В каждый проект я помещаю этот конфиг, он говорит редактору запустить папку внутри образа localhost/ai-opensource.
github.com/ai/environment/blob

10 comments
Андрей Ситник

Опенсорс-проектов у меня много, они все маленькие, там общий .devcontainer.json будет мешать (в отличие от больших рабочих проектов).

Поэтому этот конфиг я скрываю от git.
github.com/ai/environment/blob

В больших рабочих проектах уже общий конфиг в git.
github.com/hplush/slowreader/b

Конфиг .devcontainer.json — это не какая-то фишка VS Code.

Это открытый стандарт. Его поддерживает JetBrains и куча мелких инструментов.
containers.dev/supporting

И есть JS API, чтобы встроить его поддержку в любую среду.

Опенсорс-проектов у меня много, они все маленькие, там общий .devcontainer.json будет мешать (в отличие от больших рабочих проектов).

Поэтому этот конфиг я скрываю от git.
github.com/ai/environment/blob

В больших рабочих проектах уже общий конфиг в git.
github.com/hplush/slowreader/b

Андрей Ситник

VS Code видя .devcontainer.json сразу предлагает мне запустить проект в контейнере.

В настройках VS Code указано какие плагины должны переехать тогда в контейнер.
github.com/ai/environment/blob

Терминал в VS Code так же запускается внутри контейнера (хотя можно запустить и снаружи).

Андрей Ситник

В настройках VS Code можно указать репозиторий со своими конфигами среды и скриптом установки
github.com/ai/environment/blob

После сборки образа VS Code запустит скрипт и у вас будет шелл, как в вашей обычной системе — тот же prompt, те же алиасы.
github.com/ai/environment/blob

Андрей Ситник

Так как у меня podman, а не docker, то я могу даже шарить быстрый pnpm-кеш на ссылках между проектами. В podman volume — это btrfs-диск и hard link работают между ними.

github.com/ai/environment/blob

И даже история консоли общая
github.com/ai/environment/blob
github.com/ai/environment/blob

Андрей Ситник

В конфиге шелла, я с помощью проверки переменной $container понимаю, внутри ли я контейнера.

Исходя из этого накладываю немного разные настройки.

Например, снаружи контейнера я выключаю git-хуки
github.com/ai/environment/blob
github.com/ai/environment/blob

С помощью devcontainer/cli можно работать с контейнером и из обычной консоли, вне VS Code.

Я сделал скрипт devup для запуска контейнера и dev для запуска скриптов внутри контейнера.

github.com/ai/environment/blob

В конфиге шелла, я с помощью проверки переменной $container понимаю, внутри ли я контейнера.

Исходя из этого накладываю немного разные настройки.

Например, снаружи контейнера я выключаю git-хуки
github.com/ai/environment/blob
github.com/ai/environment/blob

Андрей Ситник

Все свои рабочие скрипты и команду pnpm в ноутбуке я сделал алиасом для dev — так что pnpm test продолжает работать в обычной консоли, просто запускает всё внутри Dev Container.

github.com/ai/environment/blob

github.com/ai/environment/blob

Андрей Ситник

В итоге:
1. VS Code стартует на десяток секунд дольше (поднимает образ).
2. Но в остальном всё работает с той же скоростью (Докер в Линуксе не тратит ресурсы особо).
3. Всё изолирована — риски от взлома минимальны.
4. Рабочие привычки не изменились особо.

Спрашивайте вопросы.

Andrej

@sitnik_ru Я с npm не работаю, так что не знаю в какие моменты там запускается код сторонних библиотек, но не решит ли проблему полная изоляция (файловая система, сеть) запускаемого приложения (e.g. nodejs) и отдельный браузер.

Андрей Ситник

@alberand ну podman это же фактически оно и есть, просто пространство имён в файловой системе, сети и ID пользователей (докер в Линуксе не виртуалка, а просто режим работы ядра).

Но изоляция только скриптов не поможет, так как плагины IDE часто используют зависимости (например, Language Server).

Андрей Ситник

У меня есть правило, что если где-то ставлю версию, то надо заранее подумать, кто и как её будет обновлять.

Поэтому и для Dev Container написал скрипт, проверяющий свежие версии Node.js и pnpm
github.com/ai/environment/blob

Вызываю его при обновлении системы
github.com/ai/environment/blob

(Да, перевёл ноутбук и смартфон на испанский, чтобы практиковать язык — поэтому в скриптах вывод тоже на испанском)

У меня есть правило, что если где-то ставлю версию, то надо заранее подумать, кто и как её будет обновлять.

Поэтому и для Dev Container написал скрипт, проверяющий свежие версии Node.js и pnpm
github.com/ai/environment/blob

Вызываю его при обновлении системы
github.com/ai/environment/blob

Go Up