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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access