Лучшие практики для раскрутки контейнерных сред (разработки)
Контейнеры OCI - это удобный способ упаковки подходящего набора инструментов для проекта, чтобы среды разработки были единообразными, а новые участники проекта могли быстро начать работу, просто проверив проект и вытащив соответствующие контейнеры.
- Конечно, я не говорю о проектах, которые просто нуждаются в компиляторе C++ или Node.JS. Я говорю о проектах, которые нуждаются в определенных пакетах компилятора, которые не работают с более новой версией, чем Fedora 22, о проектах со специальными инструментами, которые необходимо устанавливать вручную в незнакомых местах, о работе над несколькими проектами, в которых есть инструменты, которые нельзя установить совместно, и тому подобное, Для такого рода вещей легче иметь контейнер, чем выполнить двадцать шагов установки, а затем молиться, чтобы биты, оставшиеся от предыдущего проекта, не сломали вас.
Однако запуск контейнера с компилятором для сборки проекта требует довольно много опций в командной строке docker (или podman). Помимо названия изображения, обычно:
- монтирование рабочего каталога проекта
- идентификатор пользователя (потому что контейнер должен обращаться к смонтированным файлам как пользователь, выполняющий его)
- если инструмент нуждается в доступе к некоторым сетевым ресурсам, ему также может понадобиться
- некоторые учетные данные, через среду или иным образом
- сокет агента ssh (переменная mount и окружения)
- если процесс сборки включает в себя сборку Docker-контейнеров
- разъем докера (крепление); buildah может работать без специальной настройки, хотя
- и если это графический инструмент (например, IDE)
- X-гнездо и переменная окружения
--ipc host
заставить работать общую память
И тогда это может усложниться другими факторами. Например, если разработчики находятся в разных отделах и не имеют доступа к одному и тому же хранилищу Docker, их образы могут называться по-разному, потому что Docker не поддерживает символические имена хранилищ (хотя Podman поддерживает).
Есть какой-то стандартный (ish) способ обработки этих опций, или все просто используют специальные сценарии-обертки?
1 ответ
Я использую Visual Studio Code Remote - расширение Containers для подключения исходного кода к контейнеру Docker, который содержит все инструменты, необходимые для создания кода (например, npm
модули, рубин gems
, eslint
, Node.JS, java
). Контейнер содержит все "инструменты", используемые для разработки / сборки / тестирования исходного кода.
Кроме того, вы также можете поместить расширения VSCode в образ Docker, чтобы помочь переносить инструменты VSCode IDE. https://code.visualstudio.com/docs/remote/containers
Вы можете предоставить Dockerfile в исходном коде для новичков, чтобы самим создавать образ Docker или присоединять VSCode к существующему контейнеру Docker.
Если вам нужно запустить сервер внутри контейнера Docker для целей тестирования, вы можете выставить порт на контейнере через VSCode и начать работу с сервером внутри контейнера с помощью браузера или cURL
с хост-машины.
Помните об известных ограничениях для Visual Studio Code Remote - расширение контейнеров. Больше всего на меня влияет бета-версия Alphine Linux. Я часто замечал, что некоторые из популярных образов Docker Hub основаны на Alphine.