Packer vs Docker: imagens de máquina vs containers
O Packer constrói imagens de máquina (AMIs, imagens de VM) para muitas plataformas; o Docker constrói imagens de container - artefatos diferentes para alvos de deploy diferentes.
O Packer (HashiCorp) automatiza a construção de imagens de máquina idênticas - AMIs, imagens Azure, imagens de VM - a partir de uma única config de origem em múltiplas plataformas. O Docker constrói imagens de container executadas por um container engine. Eles não são tanto concorrentes quanto ferramentas para tipos de artefato diferentes: imagens de máquina completas vs containers em camadas.
| Packer | Docker | |
|---|---|---|
| Artefato | Imagens de máquina (AMI, VM) | Imagens de container |
| Alvo | VMs, instâncias de cloud | Container runtimes |
| Modelo de boot | Imagem de OS completo | Processo em container |
| Multiplataforma | Muitos builders | Registries OCI |
| Melhor para | Imagens golden VM/AMI | Apps containerizadas |
No CI
Use o Docker quando você envia containers para um runtime ou Kubernetes. Use o Packer quando você assa imagens golden de VM ou cloud - por exemplo, pré-instalando tooling em uma AMI para que as instâncias iniciem prontas. Muitos pipelines usam ambos: Packer para a imagem base da instância e Docker para a aplicação dentro dela. Escolha pelo que sua infraestrutura de fato roda.
Acelere
Ambos os builds de imagem são pesados. Faça cache dos layers (Docker) e reutilize imagens base (Packer), e rode os builds no CI. Managed runners mais rápidos encurtam essas longas assagens de imagem.
O veredito
Fazendo deploy de containers: Docker. Assando imagens de máquina VM/cloud (AMIs): Packer. Eles miram artefatos diferentes e muitas vezes trabalham juntos - Packer para a imagem do host, Docker para a aplicação.