Описание Buildpacks
Buildpacks в 2011 году разработала компания Heroku, предоставляющая облачную PaaS-платформу для развертывания веб-приложений на различных языках программирования. Начиная с 2018 года Buildpacks принадлежит некоммерческому проекту CNCF (Cloud Native Computing Foundation), который занимается развитием и поддержкой контейнерных технологий, а также разрабатывает различное программное обеспечение с открытым исходным кодом для Linux и DevOps-отрасли.
Идея Buildpacks заключается в максимальной автоматизации сборки образов из исходных кодов приложений. В отличие от Docker Buildpacks не использует в своей работе такую сущность, как Dockerfile. Чтобы собрать образ приложения, достаточно лишь запустить команду сборки. Иными словами, Buildpacks преобразует исходный код приложения в доступный для запуска образ контейнера. Готовый образ запускается при помощи Docker или Podman.
Buildpacks поддерживает работу с языками программирования Ruby, Python, Node. js, PHP, Go, Java и Scala.
Buildpacks работает в два этапа — обнаружение и сборка.
На этапе обнаружения Buildpack определяет используемый язык программирования и проверяет, можно ли начать сборку приложения из исходных файлов. Например, для языка программирования Python будет запущен поиск таких файлов, как requirements.txt или setup.py. Для фреймворка Node — поиск файла package-lock.json.
На этапе сборки Buildpack применяет конфигурационные файлы приложения, скачивает зависимости, компилирует исходный код, настраивает параметры запуска и так далее. Например, на этом этапе происходит установка зависимостей, которые указаны в файле requirements.txt для приложений на языке Python.
Используем Buildpacks для сборки контейнеризированного образа
Рассмотрим применение Buildpacks на практическом примере. Для теста воспользуемся ОС Linux, а именно Ubuntu версии 22.04.
1. Установим Docker. Инструкция по установке на дистрибутиве Ubuntu приведена на официальном сайте Docker и доступа по ссылке.
2. Теперь установим Buildpacks из официального репозитория программы:
add-apt-repository ppa:cncf-buildpacks/pack-cli
apt -y install pack-cli
После завершения установки выведем справочную информацию. Это покажет, корректно ли прошла установка:
pack --help
3. Воспользуемся тестовым приложением на языке Java из репозитория GitHub. Клонируем репозиторий при помощи git clone и переходим в скачанную директорию с кодом проекта на Java:
git clone https://github.com/buildpacks/samples && cd samples/apps/java-maven
4. Для сборки образа выполняем единственную команду:
pack build myapp --builder cnbs/sample-builder:jammy
Создание образа может занять пару минут или больше, особенно если процесс запущен впервые, потому что утилита скачивает необходимые зависимости.
5. Когда сборка завершится, можно запустить готовый образ. Используем Docker при помощи команды:
docker run --rm -p 8080:8080 myapp
Открываем браузер и переходим по адресу сервера, используя порт 8080, чтобы открыть наше веб-приложение:
В этой статье мы рассмотрели утилиту Buildpacks, которую можно использовать вместо Dockerfile. Она значительно ускоряет и упрощает процесс создания образов контейнеризированных приложений. С момента появления утилиты у нее значительно расширился список поддерживаемых языков программирования, а также функционал.