Представьте себе паровой пресс, который за считанные минуты штампует идеально одинаковые чугунные болванки по единому чертежу. В мире инфраструктуры эту роль выполняет Packer — инструмент от HashiCorp, превращающий ручную возню с установкой ОС и софта в отлаженный конвейер по производству готовых машинных образов.
В этой статье мы разберём, что скрывается под капотом Packer, зачем он нужен современному сисадмину, и как с его помощью наладить выпуск «золотых» образов для любых платформ — от локального VMware до облачных AWS, Azure и Yandex Cloud.
Что такое Packer?
Packer — это инструмент с открытым исходным кодом (MPL 2.0) для автоматизированного создания идентичных машинных образов для множества платформ из единого источника конфигурации. Он лёгкий, работает на всех основных операционных системах и умеет создавать образы для нескольких платформ параллельно.
Под машинным образом понимается статичная единица, содержащая предварительно настроенную операционную систему и установленное ПО, которая используется для быстрого запуска новых машин. Форматы образов различаются в зависимости от платформы: AMI для EC2, VMDK/VMX для VMware, OVF для VirtualBox, Docker-образы и многие другие.
⚡ Важно
Packer не заменяет системы управления конфигурациями вроде Ansible, Chef или Puppet. Напротив — он активно использует их для установки и настройки ПО внутри собираемого образа
Зачем нужен Packer? Пять причин поставить его в пайплайн
1. Молниеносный запуск инфраструктуры
Вместо того чтобы ждать 10–15 минут, пока поднимется VM и выполнится весь объём пост-установочных скриптов, вы запускаете готовый образ — и через считанные секунды получаете полностью подготовленную машину. Это ускоряет не только production, но и разработку: тестовые окружения поднимаются мгновенно.
2. Единый образ для всех сред
Packer создаёт идентичные образы для разных платформ. Вы можете запускать production в AWS, staging/QA в OpenStack, а разработку — в локальном VirtualBox, используя один и тот же образ. Никаких сюрпризов из-за различий в окружениях.
3. Улучшенная стабильность
Вся установка и настройка софта происходит на этапе сборки образа. Если в сборочных скриптах есть баги, они выявляются на стадии сборки, а не спустя несколько минут после запуска боевой машины. Это радикально сокращает время устранения проблем.
4. Тестируемость
Готовый образ можно быстро запустить и проверить дымовым тестом. Если тест прошёл — можно с уверенностью утверждать, что все машины, запущенные из этого образа, будут работать корректно.
5. Полная автоматизация и воспроизводимость
Packer позволяет определить конфигурацию образа как код (Infrastructure as Code). Шаблоны хранятся в репозитории, версионируются, проходят code review — и любое изменение в инфраструктуре становится отслеживаемым и воспроизводимым.

Как работает Packer: три кита автоматизации
Архитектура Packer строится вокруг трёх ключевых компонентов, которые описываются в шаблоне:
Builder (строитель)
Builder создаёт инстанс машины, на которой будет производиться сборка. Примеры:
amazon-ebs— для создания AMI в AWS,azure-arm— для образов Azure,virtualbox-iso— для VirtualBox из ISO,vmware-iso— для VMware,docker— для Docker-образов,yandex— для Yandex Compute Cloud.
Каждый builder обрабатывает платформо-специфичные детали: формат диска, тип виртуализации, учётные данные.
Provisioner (провижионер)
После того как машина загружена, в дело вступают провижионеры. Они выполняют настройку образа:
shell— запуск shell-скриптов,ansible— применение плейбуков Ansible,chef/puppet— использование соответствующих систем управления,file— загрузка файлов в образ.
Провижионеры выполняются последовательно, шаг за шагом собирая итоговую конфигурацию.
Post-processor (пост-процессор)
После того как образ создан и настроен, пост-процессоры выполняют финальные действия:
- загрузка артефакта в реестр образов,
- сжатие,
- создание Vagrant-бокса,
- экспорт в различные форматы.
Packer в действии: базовый сценарий сборки
Рассмотрим типовой процесс сборки образа на основе ISO-образа для VirtualBox.
Шаг 1. Установка Packer
На Rocky Linux / RHEL-системах:
# Добавление репозитория HashiCorp
sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo
# Установка Packer
sudo dnf -y install packerАльтернативный способ — загрузка бинарного архива:
wget https://releases.hashicorp.com/packer/1.8.3/packer_1.8.3_linux_amd64.zip
unzip packer_1.8.3_linux_amd64.zip
sudo mv packer /usr/local/bin/Проверка установки:
packer --versionШаг 2. Создание шаблона (HCL2)
Современные шаблоны Packer пишутся на HCL2 (HashiCorp Configuration Language) с расширением .pkr.hcl. Пример базового шаблона для VirtualBox:
# source block — определяет builder
source "virtualbox-iso" "ubuntu-example" {
iso_url = "http://old-releases.ubuntu.com/releases/22.04/ubuntu-22.04-server-amd64.iso"
iso_checksum = "sha256:1234567890abcdef..."
guest_os_type = "Ubuntu_64"
disk_size = 40960
http_directory = "./http"
ssh_username = "vagrant"
ssh_password = "vagrant"
shutdown_command = "echo 'vagrant' | sudo -S shutdown -P now"
vm_name = "my-ubuntu-image"
}
# build block — собирает всё воедино
build {
sources = ["source.virtualbox-iso.ubuntu-example"]
provisioner "shell" {
inline = [
"apt-get update",
"apt-get install -y nginx",
"systemctl enable nginx"
]
}
post-processor "manifest" {
output = "manifest.json"
}
}Шаг 3. Запуск сборки
# Инициализация плагинов (если используются внешние builder'ы)
packer init template.pkr.hcl
# Валидация шаблона
packer validate template.pkr.hcl
# Запуск сборки
packer build template.pkr.hclВ процессе сборки Packer:
- Скачивает указанный ISO,
- Запускает виртуальную машину в VirtualBox,
- Устанавливает ОС (автоматически, через preseed-файл),
- Подключается по SSH и выполняет провижионинг,
- Выключает VM,
- Экспортирует готовый образ.
Продвинутые сценарии
Сборка для нескольких платформ одновременно
Один шаблон может описывать сборку для разных платформ параллельно:
source "amazon-ebs" "web" {
ami_name = "web-server-{{timestamp}}"
instance_type = "t2.micro"
region = "us-west-2"
source_ami = "ami-12345678"
ssh_username = "ubuntu"
}
source "virtualbox-iso" "web" {
# ... конфигурация для VirtualBox
}
build {
sources = [
"source.amazon-ebs.web",
"source.virtualbox-iso.web"
]
provisioner "shell" {
inline = ["echo 'Building for all platforms!'"]
}
}Каскадная сборка (base-образы)
Для ускорения сборки имеет смысл разделять процесс на этапы: сначала создаётся минимальный base-образ, а затем на его основе — специализированные образы (веб-сервер, база данных и т.д.). Это экономит время, так как base-образ пересобирается реже, чем финальные кастомизации.
Packer vs альтернативы
Packer остаётся инструментом выбора, если вам нужна платформенная агностичность и возможность собирать образы для гетерогенных сред из одного источника.
Заключение
Packer — это не просто очередной инструмент в арсенале DevOps. Это индустриальный пресс для штамповки инфраструктуры, превращающий хаотичный процесс ручной настройки серверов в предсказуемый, воспроизводимый и автоматизированный конвейер.
Если вы до сих пор настраиваете сервера вручную или используете устаревшие методы клонирования VM — самое время поставить Packer в свой пайплайн. Начните с малого: опишите сборку базового образа для вашей основной платформы, добавьте провижионинг через Ansible, и вы быстро оцените, насколько проще становится жизнь, когда у вас под рукой всегда есть свежий, протестированный «золотой» образ.
⚙️ Машинное отделение ROADIT благодарит за прочтение.
Больше команд, шпаргалок и обзоров — на roadit.ru и в нашем Телеграф-канале.
📋 Все команды