Chapter 16. Creating Images
Creating Images with Packer
Packer is a tool that helps create machine images for multiple platforms from a single source. Both virtual machine images and container images can be constructed with Packer.
A Dockerfile lets you package your application into a single image that’s easy to deploy in different environments (yet on a container platform only), which is why the Docker project has embraced the metaphor of the shipping container. Its remote API simplifies the automation of software systems that run on top of Docker, but one should be aware of the security challenges of such an API.
For simple container images the standard Dockerfile works just fine. However, when you start to create more complex images, you’ll quickly miss the power that Ansible provides. Fortunately, you can use Ansible playbooks as a provisioner for HashiCorp Packer. Using a playbook with roles helps reduce the complexity.
The workflows in this chapter are useful when you want to postpone the choice of where and how you run your applications; with one source, you can create images for several cloud providers as well as for containers. Also you can reduce you cloud bills because you can combine online use in the cloud with local development in Vagrant VirtualBox.
Vagrant VirtualBox VM
The first example is a Packer definition to create a RHEL 8 image for Vagrant/VirtualBox, or a box as VirtualBox calls it.
Build the image with:
$ packer build rhel8.pkr.hcl
This Packer file ...
Get Ansible: Up and Running, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.