Pull to refresh

Comments 22

А вы знаете толк и взвращениях!

Если на сервере можно поставить docker, то наверняка там можно поставить и https://nixos.org/. Рекомендую глянуть что это такое, - в конкретном случае развернуть свой vim через nix + home-manager намного удобней, чем через docker вот эти все приседания делать. Ну и плюс это будет нативно, а не в контейнере.

sh <(curl -L https://nixos.org/nix/install), потом home-manager, потом сборка environment (а это тянет store и может качать 1–2 ГБ, особенно если много нестандартного).

С Docker всё быстрее: docker build кешируется, rebuild разных сборок происходит моментально и без дубликатов.

По производительности — она одинаковая. Можно даже microbenchmark запустить и убедиться.

Возможно для каких-то долгоиграющих или mission-critical систем я бы действительно выбрал nix. Трудно сказать.

Спасибо за коммент :)

Тоже тут склоняюсь в сторону Docker хотя бы потому, что более обкатаный вариант и меньше всего грузить нужно.

Но пару раз видел у ThePrimeagen, что он бы хотел дать шанс и попробовать nix для этого (не помню в каком видео). Типа может быть легковесней и быстрее.

Иногда нужно запустить nvim на старом сервере. Но тут сразу куча проблем: одно не поставить, другое не собрать

поэтому мы запускаем nvim локально открывая файлы по ssh и не занимаемся фигнёй с установкой docker и запуском в нём контейнеров.

а если что-то обновить — можно развалить весь проект.

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

Да, открывать файлы по ssh и запускать nvim локально — это удобно, когда нужен просто редактор.

Но если проект требует LSP, линтеров, сборок — то серверное окружение (gcc, system includes, venv, специфические пакеты) должно совпадать.

Запуская nvim локально через scp://, ты получаешь autocomplete и проверки на своей машине, которые могут отличаться от того, что есть на сервере.

Поэтому docker здесь — не про «фигню», а про то, чтобы поднять точную среду сборки и анализа прямо на сервере, и получать LSP-диагностику ровно под ту систему, где это реально работает.

Остальное - это эмоции.

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

Просто в моём случае он нужен на сервере. Одно другому не мешает.

Я не понял один момент (или невнимательно прочёл): почему не передаёте айдишники пользователя внутрь контейнера? Вы ведь не сможете сохранять локальные файлы, если айдишники пользователя внутри контейнера и снаружи отлючаются. Или у вас там 666 по умолчанию?

Да, всё верно, по-хорошему стоило бы сразу добавить -u $(id -u):$(id -g), чтобы uid/gid совпадали и файлы создавались с нужными правами. Что-то вроде:

docker run -it -u $(id -u):$(id -g) 

В моём случае я для статьи просто поленился это прописывать — хотел сосредоточиться на nvim в docker. Но да, для «боевого» сценария с общей рабочей папкой или CI это было бы правильнее.

На старом сервере работает просто vim. пулишь из своей репы .vimrc (старый можно сохранить чтобы откатить) апдейтиш плагины и все работает. И не надо ещё допом тянуть докер и засирать систему ещё одним контейнером на пару гигов (поработай на одноплатниках с максимальным объемом в 32гб поймёшь боль)

Когда нужен просто старый vim — тогда  хватает старого .vimrc, без докера и LSP.

Иногда  нужен современный Neovim с LSP, treesitter и прочими фишками прямо на сервере, где локальная среда важна (тот же gcc, venv, include headers).

 

А одноплатники тут вообще не при чём — задача не в том, чтобы экономить, а чтобы получить определенную dev-среду.

 

Старый vim я и так могу поднять за 5 минут с git clone .vimrc. Но когда нужен современный nvim с lua + LSP — проще кинуть в докер.

Вот и все дела. Ничего тут нет особенного.

А что на счёт sshfs? Локально можно настроить любую среду. И что самое важное сервер ничего лишнего не увидит.

От себя добавлю. sshfs для LSP — это боль: он бесконечно тормозит, treesitter и autocompletion умирают на latency.

Плюс, если на одном сервере python 3.2, а на другом 3.10 — локально придётся держать весь зоопарк, чтобы LSP / linters совпадали.

А так запускаешь docker прямо на сервере, и получаешь точно ту среду, в которой реально работает код — без костылей. Сразу же.

Я бы на сервере такое вот не разворачивал. Но что бы иметь на девелоперской машине легко воссоздаваемое одинаковое окружение - нормальный вариант. Думал тоже пару раз такое сделать. Ваш опыт интересен и статья хорошая.

Вопрос: задержка, что с ней? Вы написали кратко, но ее заметно по сравнению с нативным вариантом по вашим ощущениям? Как то можете оценить? (понимаю что это сложный вопрос).

Спасибо, рад что статья полезна.

По задержке могу сказать так: на Linux разницы почти нет, потому что Docker использует тот же kernel, только в отдельных namespaces.

Я делал microbenchmark запуска Neovim (nvim --headless +qall) — получалось ~0.0170s нативно и ~0.0172s в docker, то есть разница <1%, что полностью в рамках погрешности.

На глаз и по ощущениям (открытие файлов, LSP hints, Telescope) тоже одинаково.

Так что на Linux это почти «натив», зато плюс: среда всегда повторяемая и можно быстро rebuild для другой конфигурации.

А почему докер? Для CentOS роднее Podman. К тому же у него нет постоянно работающего демона. Запускать подобные штуки через него лучше.

Согласен, podman для CentOS/RedHat-дистров роднее и no-daemon у него круто реализован.

Тут docker просто уже стоял (исторически на CentOS 7 так чаще), а для задач типа dev-containers они почти одинаковы, тем более CLI совместим.

Но есть нюанс: образ с моей сборкой nvim можно легко забрать через docker save и кинуть на другой сервер (через docker load), и он там сразу заработает в том же виде.
С podman это чуть сложнее для mix-инфраструктуры.

С каждым днём мы все дальше от Бога.... (Статью плюсанул. Может быть даже когда-нибудь пригодится)

Sign up to leave a comment.

Articles