686
0
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

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

Время чтения 4 минуты
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
686
0
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

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

Используем 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 поддерживает работу с языками программирования 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

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

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

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

docker run --rm -p 8080:8080 myapp

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

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

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

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники