Используем Buildpacks вместо Dockerfile

Привет! На связи Александр Бархатов — DevOps-инженер в крупнейшем продуктовом холдинге и автор статей в медиа вАЙТИ. Самое популярное средство для сборки контейнеризированного приложения — это Dockerfile, текстовый файл, в котором прописаны специальные инструкции для готовых Docker-образов. Несмотря на всеобщую популярность Docker, в 2011 году вышел инструмент под названием Buildpacks, принцип работы которого мы рассмотрим в этой статье.

Используем Buildpacks вместо Dockerfile

Используем Buildpacks вместо Dockerfile

Описание Buildpacks

Buildpacks в 2011 году разработала компания Heroku, предоставляющая облачную PaaS-платформу для развертывания веб-приложений на различных языках программирования. Начиная с 2018 года Buildpacks принадлежит некоммерческому проекту CNCF (Cloud Native Computing Foundation), который занимается развитием и поддержкой контейнерных технологий, а также разрабатывает различное программное обеспечение с открытым исходным кодом для Linux и DevOps-отрасли.

Идея Buildpacks заключается в максимальной автоматизации сборки образов из исходных кодов приложений. В отличие от Docker Buildpacks не использует в своей работе такую сущность, как Dockerfile. Чтобы собрать образ приложения, достаточно лишь запустить команду сборки. Иными словами, Buildpacks преобразует исходный код приложения в доступный для запуска образ контейнера. Готовый образ запускается при помощи Docker или Podman.

Принцип работы Buildpacks

Принцип работы Buildpacks

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

19ce858f805a3cffb86030e8f2152e8a.pnge26cdb55857c73a473ce71193d8d0831.png

После завершения установки выведем справочную информацию. Это покажет, корректно ли прошла установка:

pack --help

8d3d74dcd8e801ba5fca5440a6a774be.png

Buildpacks успешно установлен

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

9532514e94fb13df6466f4cc8f3dceea.png

Создание образа может занять пару минут или больше, особенно если процесс запущен впервые, потому что утилита скачивает необходимые зависимости.

5. Когда сборка завершится, можно запустить готовый образ. Используем Docker при помощи команды:

docker run --rm -p 8080:8080 myapp

70ebd52f25db92486f50f41c6459e4ca.png

Открываем браузер и переходим по адресу сервера, используя порт 8080, чтобы открыть наше веб-приложение:

119cb09184ba7ad6c7520a5d8ff272d1.png

Приложение успешно запущено

В этой статье мы рассмотрели утилиту Buildpacks, которую можно использовать вместо Dockerfile. Она значительно ускоряет и упрощает процесс создания образов контейнеризированных приложений. С момента появления утилиты у нее значительно расширился список поддерживаемых языков программирования, а также функционал.

вАЙТИ — DIY-медиа для ИТ-специалистов. Делитесь личными историями про решение самых разных ИТ-задач и получайте вознаграждение.

Еще больше статей по теме

Как использовать Ansible для простых и сложных задач
Автоматизируем мелкую повседневную рутину и раскатку инфраструктурных компонентов.

Используем Fail2ban для защиты SSH
Рассказываю, как установить и настроить Fail2ban для защиты SSH от сетевых угроз.

Обзор Snort для обнаружения вторжений
Как использовать Snort для обнаружения и анализа подозрительного трафика.

© Habrahabr.ru