логотип PurpleSchool
логотип PurpleSchool

Использование Bake для сбора образов в Docker

Автор

Олег Марков

Введение

Современная разработка программного обеспечения требует автоматизации и оптимизации процессов на всех этапах разработки. Docker стал стандартом для контейнеризации приложений, а его экосистема постоянно развивается, реагируя на нужды разработчиков. Одним из таких ответов является инструмент Docker Bake, который помогает упростить создание и сборку образов.

Что такое Docker Bake?

Docker Bake — это мощный инструмент, предоставляемый в рамках Docker Buildx, который облегчает создание сложных сценариев сборки. Он помогает автоматизировать процессы, избавляя нас от повторяющихся действий и ручной работы. В этой статье вы увидите, как это работает на практике, и освоите ключевые возможности Docker Bake.

Использование Docker Bake

Docker Bake позволяет определять и выполнять множество этапов сборки в одном файле, таким образом избегая сложностей с написанием и поддержкой скриптов на Bash или Makefile. Основной файл конфигурации Docker Bake называется docker-bake.hcl. Этот файл позволяет описывать множество этапов сборки, указывая базовые образы, теги и параметры сборки.

Пример конфигурационного файла

Чтобы будет более понятно, давайте посмотрим, как выглядит простой файл docker-bake.hcl:

// Здесь мы определяем группы сборок и параметры для каждой из них.
group "default" {
  targets = ["app", "db"]
}

target "app" {
  context = "./app"
  dockerfile = "./app/Dockerfile"
  tags = ["myapp:latest", "myapp:v1.0"]
}

target "db" {
  context = "./db"
  dockerfile = "./db/Dockerfile"
  tags = ["mydb:latest", "mydb:v1.0"]
}

Разбор примера

  • Group: В этом примере определена группа сборки default, которая включает цели app и db. Это удобно для управления множеством связанных сборок.
  • Target: Каждая цель (target) указывает путь к контексту сборки и Dockerfile, а также теги, которые будут назначены полученному образу.

Запуск сборки

После того как конфигурационный файл создан, можно запустить процесс сборки с помощью команды:

docker bake

Эта команда прочитает конфигурационный файл и выполнит все указанные сборки последовательно или параллельно, в зависимости от ваших настроек.

Параллельная сборка

Docker Bake предоставляет возможность выполнения параллельных сборок, что значительно экономит время, особенно при работе с несколькими образами. Чтобы активировать этот режим, достаточно указать дополнительный параметр при запуске:

docker bake --set *.max-parallel=3

В этом примере сборка будет выполняться параллельно до трех задач одновременно. Это особенно полезно в средах CI/CD, где время имеет критическое значение.

Расширенные возможности

Docker Bake предлагает множество дополнительных возможностей для оптимизации сборки контейнеров:

Использование аргументов и переменных

Вы можете добавлять аргументы к вашим целям сборки, передавая их напрямую в конфигурационный файл:

target "app" {
  context = "./app"
  dockerfile = "./app/Dockerfile"
  args = {
    NODE_ENV = "production"
  }
}

Кэширование

Кэширование — одна из ключевых функций Docker Bake, особенно полезная при частых сборках. Вы можете указать волюмы для кэширования или использовать Redis для кеша.

target "app" {
  context = "./app"
  dockerfile = "./app/Dockerfile"
  cache-from = ["type=local,src=./cache"]
}

Данная конфигурация позволяет использовать локальный каталог для хранения промежуточных результатов сборки.

Заключение

Docker Bake — это мощный инструмент, который значительно упрощает процесс сборки Docker-образов, делая его гибким и автоматизированным. Использование файлов конфигурации вместо скриптов позволяет четко управлять всеми этапами сборки и легко их изменять. Параллельная сборка и возможности кеширования делают Docker Bake необходимым инструментом для современных DevOps процессов. Благодаря этой статье у вас теперь есть введение в Docker Bake, и вы способны интегрировать его в свои текущие рабочие процессы.

Карта развития разработчика

Получите полную карту развития разработчика по всем направлениям: frontend, backend, devops, mobile