🅴🆁🆄🅰 🇷🇺Про контейнеризацию в разработке софта.<br>Порой имеется несколько разных #<a class="" href="https://hub.hubzilla.de/search?tag=linux" rel="nofollow noopener noreferrer" target="_blank">linux</a> (и дистрибутивов и версий) под которые надо разрабатывать приложения (собирая, отлаживая). Либо локально на машине разработчика или же на серверах каких-то. <br><br>Как вариант, берётся #<a class="" href="https://hub.hubzilla.de/search?tag=VSCode" rel="nofollow noopener noreferrer" target="_blank">VSCode</a> с <a href="https://code.visualstudio.com/docs/devcontainers/containers" rel="nofollow noopener noreferrer" target="_blank">предлагаемым подходом</a> и даже есть более-менее <a href="https://code.visualstudio.com/docs/devcontainers/tutorial" rel="nofollow noopener noreferrer" target="_blank">подробная информация</a> для освоения процесса.<br>Для чего берётся вот это расширение <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers" rel="nofollow noopener noreferrer" target="_blank">Dev Containers</a>. И в контейнер ходит не через #<a class="" href="https://hub.hubzilla.de/search?tag=SSH" rel="nofollow noopener noreferrer" target="_blank">SSH</a>, а производит установку внутрь контейнера такой вещи как «VSCode Server». Выполняется установка прозрачно для пользователя, в процессе «подключения» к заданному контейнеру (на локальной машине). #<a class="" href="https://hub.hubzilla.de/search?tag=VSCode" rel="nofollow noopener noreferrer" target="_blank">VSCode</a> берёт идентификатор своей версии (commit id) и по нему скачивает «VSCode Server» со специального сайта #<a class="" href="https://hub.hubzilla.de/search?tag=Microsoft" rel="nofollow noopener noreferrer" target="_blank">Microsoft</a>.<br><br>А само окно #<a class="" href="https://hub.hubzilla.de/search?tag=VSCode" rel="nofollow noopener noreferrer" target="_blank">VSCode</a> становится чем-то вроде удалённого GUI для того сервера, что теперь запущен в контейнере. <br>Приколов несколько:<ul><li> В таком открывшемся окне #<a class="" href="https://hub.hubzilla.de/search?tag=VSCode" rel="nofollow noopener noreferrer" target="_blank">VSCode</a> на вкладке расширений придётся включить уже имеющиеся/установленные расширения, чтобы они скопировались внутрь контейнера. Т.е. работают он реально там на сервере, а не тут локально.</li><li> Некоторым расширениям нужны всякие вещи, вроде #<a class="" href="https://hub.hubzilla.de/search?tag=LSP" rel="nofollow noopener noreferrer" target="_blank">LSP</a> сервера, #<a class="" href="https://hub.hubzilla.de/search?tag=lldb" rel="nofollow noopener noreferrer" target="_blank">lldb</a> / #<a class="" href="https://hub.hubzilla.de/search?tag=gdb" rel="nofollow noopener noreferrer" target="_blank">gdb</a>, иногда <a href="https://github.com/lldb-tools/lldb-mi" rel="nofollow noopener noreferrer" target="_blank">lldb-mi</a>. Всё это внутрь контейнера придётся устанавливать самостоятельно, ручками.</li><li> Использовать расширение <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers" rel="nofollow noopener noreferrer" target="_blank">Dev Containers</a> получится лишь на официальной Visual Studio Code — в таких вариантах как #<a class="" href="https://hub.hubzilla.de/search?tag=Code-OSS" rel="nofollow noopener noreferrer" target="_blank">Code-OSS</a>, #<a class="" href="https://hub.hubzilla.de/search?tag=VSCodium" rel="nofollow noopener noreferrer" target="_blank">VSCodium</a> и #<a class="" href="https://hub.hubzilla.de/search?tag=Uncoded" rel="nofollow noopener noreferrer" target="_blank">Uncoded</a> оно просто не доступно. А если его установить через скаченный #<a class="" href="https://hub.hubzilla.de/search?tag=VSIX" rel="nofollow noopener noreferrer" target="_blank">VSIX</a>, то работать не будет.</li></ul><br><br><strong>Хорошо или плохо?</strong><br>Официальный #<a class="" href="https://hub.hubzilla.de/search?tag=VSCode" rel="nofollow noopener noreferrer" target="_blank">VSCode</a> конечно же шлёт телеметрию в #<a class="" href="https://hub.hubzilla.de/search?tag=Microsoft" rel="nofollow noopener noreferrer" target="_blank">Microsoft</a> «со страшной силой» да и вообще, является проприетарным вариантом дистрибьюции #<a class="" href="https://hub.hubzilla.de/search?tag=Code-OSS" rel="nofollow noopener noreferrer" target="_blank">Code-OSS</a>, который тоже, в свою очередь, страдает телеметрией (из-за чего и появились #<a class="" href="https://hub.hubzilla.de/search?tag=VSCodium" rel="nofollow noopener noreferrer" target="_blank">VSCodium</a> да #<a class="" href="https://hub.hubzilla.de/search?tag=Uncoded" rel="nofollow noopener noreferrer" target="_blank">Uncoded</a> ).<br><br>Однако, именно в силу проприетарности #<a class="" href="https://hub.hubzilla.de/search?tag=VSCode" rel="nofollow noopener noreferrer" target="_blank">VSCode</a> и позволяет из галереи устанавливать проприетарное же расширение <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers" rel="nofollow noopener noreferrer" target="_blank">Dev Containers</a>. А в галереи у #<a class="" href="https://hub.hubzilla.de/search?tag=Code-OSS" rel="nofollow noopener noreferrer" target="_blank">Code-OSS</a> этого расширения нет и понятно почему — не сможет скачать серверную часть, которую нужно устанавливать внутри контейнера (в качестве агента) и которая тоже проприетарная.<br><br><strong>В целом:</strong> <ul><li> Работать с кодом получается, равно как и обычным образом, как если бы тулчейн и библиотеки не находились внутри контейнера;</li><li> Поддерживаются как обычные #<a class="" href="https://hub.hubzilla.de/search?tag=Docker" rel="nofollow noopener noreferrer" target="_blank">Docker</a> -контейнеры так и #<a class="" href="https://hub.hubzilla.de/search?tag=rootless" rel="nofollow noopener noreferrer" target="_blank">rootless</a> варианты контейнеров — соответственно, и #<a class="" href="https://hub.hubzilla.de/search?tag=Podman" rel="nofollow noopener noreferrer" target="_blank">Podman</a> -контейнеры тоже (которые априори #<a class="" href="https://hub.hubzilla.de/search?tag=rootless" rel="nofollow noopener noreferrer" target="_blank">rootless</a> );</li><li> Не обязательно заморачиваться с <code>.devcontainer/devcontainer.json</code> в проекте, можно подключаться из #<a class="" href="https://hub.hubzilla.de/search?tag=VSCode" rel="nofollow noopener noreferrer" target="_blank">VSCode</a> к любому контейнеру — запустится новое окно редактора.</li></ul><br><br>Нормальный проприетарный продукт, охватывает разные сценарии. В том числе и для любителей сидеть на #<a class="" href="https://hub.hubzilla.de/search?tag=Windows" rel="nofollow noopener noreferrer" target="_blank">Windows</a> и вести разработку через #<a class="" href="https://hub.hubzilla.de/search?tag=WSL" rel="nofollow noopener noreferrer" target="_blank">WSL</a> (Windows Subsystem for Linux v2).<br><br>Чтобы работало с #<a class="" href="https://hub.hubzilla.de/search?tag=rootless" rel="nofollow noopener noreferrer" target="_blank">rootless</a> контейнерами надо в: <code>~/.config/Code/User/settings.json</code><br>прописать параметры вида:<br><pre><code>"dev.containers.dockerSocketPath": "unix:///run/user/100500/docker.sock",<br>"docker.environment": {<br> "DOCKER_HOST": "unix:///run/user/100500/docker.sock"<br>},</code></pre>Подсмотреть unix-socket можно через:<br><pre><code>$ systemctl status --user docker.socket<br>... <br> Listen: /run/user/100500/docker.sock (Stream)</code></pre><br>#<a class="" href="https://hub.hubzilla.de/search?tag=vscode" rel="nofollow noopener noreferrer" target="_blank">vscode</a> #<a class="" href="https://hub.hubzilla.de/search?tag=containerization" rel="nofollow noopener noreferrer" target="_blank">containerization</a> #<a class="" href="https://hub.hubzilla.de/search?tag=containers" rel="nofollow noopener noreferrer" target="_blank">containers</a> #<a class="" href="https://hub.hubzilla.de/search?tag=softwaredevelopment" rel="nofollow noopener noreferrer" target="_blank">softwaredevelopment</a> #<a class="" href="https://hub.hubzilla.de/search?tag=software" rel="nofollow noopener noreferrer" target="_blank">software</a> #<a class="" href="https://hub.hubzilla.de/search?tag=lang_ru" rel="nofollow noopener noreferrer" target="_blank">lang_ru</a> @<a href="https://3zi.ru/@Russia" rel="nofollow noopener noreferrer" target="_blank">Russia</a> @<a href="https://newsmast.community/@programming" rel="nofollow noopener noreferrer" target="_blank">Programming Feed</a>