Это платформа компоновщика в DINP, основная задача которой — преобразование предоставленных пользователем пакетов кода в образ Docker и отправка его в Docker Registry.
Код пользователя должен быть развернут на PaaS-платформе. Для этого сначала необходимо передать этот код платформе. Но как это сделать? Через Git? Или напрямую загрузить? Будет ли это исходный код или уже скомпилированный? Интерпретируемые языки, конечно, не требуют компиляции, но что делать с компилируемыми языками, такими как Go или Java? Должны ли мы просить пользователей предоставить нам .go или .java файлы, чтобы мы могли скомпилировать их самостоятельно? Или же пользователи должны будут скомпилировать свои программы и передать нам готовый бинарник (.class файл)?Платформа находится на ранней стадии развития, поэтому мы хотим выполнять минимальное количество действий, чтобы минимизировать вероятность ошибок. По мере развития платформы можно будет добавлять новые возможности. Поэтому мы выбрали вариант, при котором пользователи передают нам уже скомпилированный код. Например, если это Java, то они могут передать нам WAR-файл; если это Go, то потребуется скомпилированный бинарник (скомпилированный для 64-битной Linux, так как платформа работает на 64-битной Linux).Некоторые PaaS-системы, такие как tsuru, требуют, чтобы пользователи загружали свой код в определенный репозиторий и в определенную ветку, после чего запускается скрипт сборки и развёртывания. Это выглядит хорошо, но такой подход довольно сложен и имеет множество проблем, поэтому пока оставим это на потом.
Далее следует вопрос о том, через какие методы код будет передан платформе. Мы поддерживаем два способа: прямую загрузку файла на странице и загрузку файла по HTTP-адресу, доступному для скачивания.
Код пользователя может быть написан на различных языках, таких как Java, PHP или Python. Пользователи предоставляют tar.gz-пакет, и наша задача — преобразовать его в docker-образ.
Наиболее простой способ реализации: dinp предоставляет базовый образ, содержащий только среду Ubuntu или CentOS. Пользователи должны обеспечивать зависимости runtime, такие как JDK, Tomcat и webapp для Java. Также требуется наличие запускаемого скрипта, такого как control-файла в корневой директории, который можно запустить командой ./control start
. Если код пользователя написан на PHP, то необходим nginx, php-fpm и сам код. Этот способ слишком усложнен. Если это GoLang, можно использовать вышеописанный метод, так как GoLang статически компилируется и имеет мало зависимостей. Java, PHP, Python, Ruby — если заставишь пользователей делать так, они точно расплачутся...Можно создать различные базовые образы для разных языков программирования. Например, для Java можно создать базовый образ с заранее установленной JDK и Tomcat, чтобы пользователи могли просто загружать WAR-файлы. Для PHP можно создать базовый образ с заранее настроенными Nginx и php-fpm, чтобы пользователи могли загружать свои PHP-коды.
Да, это тот же подход, который используется в Builder платформе. Мы подготовили несколько базовых образов, позволяющих пользователям выбирать нужный им на странице. Выбор базового образа автоматически указывает нам на тип используемого кода (например, Java-приложение обязательно будет использовать Java-образ). Затем мы генерируем Dockerfile для различных типов приложений, объединяя код пользователя с базовым образом, что решает проблему!
Код доступен здесь. Это проект на GoLang, использует Beego framework, установка проста, как обычно для GoLang-проектов:
mkdir -p $GOPATH/src/github.com/dinp # Предполагается, что вы уже настроили GOROOT и GOPATH
cd $GOPATH/src/github.com/dinp
git clone https://github.com/dinp/builder.git
cd builder
go get ./...
go build
mv conf/app.conf.example conf/app.conf
# Измените conf/app.conf
./builder
Проект использует UIC как единую систему аутентификации, поэтому перед запуском тестов вам потребуется настроить UIC.Простое описание конфигураций в conf/app.conf
:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )