2013-03-23 01:41:53 -04:00
# Packer
2016-10-21 06:56:22 -04:00
[![Build Status][travis-badge]][travis]
[![Windows Build Status][appveyor-badge]][appveyor]
[![GoDoc][godoc-badge]][godoc]
[![GoReportCard][report-badge]][report]
2017-04-08 17:11:23 -04:00
[travis-badge]: https://travis-ci.org/hashicorp/packer.svg?branch=master
[travis]: https://travis-ci.org/hashicorp/packer
2016-10-21 06:56:22 -04:00
[appveyor-badge]: https://ci.appveyor.com/api/projects/status/github/mitchellh/packer?branch=master& svg=true
[appveyor]: https://ci.appveyor.com/project/hashicorp/packer
[godoc-badge]: https://godoc.org/github.com/mitchellh/packer?status.svg
[godoc]: https://godoc.org/github.com/mitchellh/packer
[report-badge]: https://goreportcard.com/badge/github.com/mitchellh/packer
[report]: https://goreportcard.com/report/github.com/mitchellh/packer
2015-01-22 21:55:34 -05:00
2017-03-12 06:04:18 -04:00
* Website: https://www.packer.io
2013-06-09 01:56:34 -04:00
* IRC: `#packer-tool` on Freenode
* Mailing list: [Google Groups ](http://groups.google.com/group/packer-tool )
2013-06-09 01:35:58 -04:00
Packer is a tool for building identical machine images for multiple platforms
from a single source configuration.
2013-03-23 01:41:53 -04:00
2013-06-09 01:35:58 -04:00
Packer is lightweight, runs on every major operating system, and is highly
2016-02-05 17:21:10 -05:00
performant, creating machine images for multiple platforms in parallel. Packer
comes out of the box with support for the following platforms:
2014-05-09 10:37:34 -04:00
* Amazon EC2 (AMI). Both EBS-backed and instance-store AMIs
2016-06-15 13:28:32 -04:00
* Azure
2017-03-22 15:08:47 -04:00
* CloudStack
2014-05-09 10:37:34 -04:00
* DigitalOcean
* Docker
* Google Compute Engine
2017-03-22 15:08:47 -04:00
* Hyper-V
* 1& 1
2014-05-09 10:37:34 -04:00
* OpenStack
* Parallels
2017-03-22 15:08:47 -04:00
* ProfitBricks
2014-05-09 10:37:34 -04:00
* QEMU. Both KVM and Xen images.
2017-03-22 15:08:47 -04:00
* Triton (Joyent Public Cloud)
2014-05-09 10:37:34 -04:00
* VMware
2017-03-22 15:08:47 -04:00
* VirtualBox
2014-05-09 10:37:34 -04:00
Support for other platforms can be added via plugins.
2013-06-29 12:29:17 -04:00
The images that Packer creates can easily be turned into
2013-06-28 09:36:01 -04:00
[Vagrant ](http://www.vagrantup.com ) boxes.
2013-03-23 01:41:53 -04:00
2013-03-23 18:59:17 -04:00
## Quick Start
2016-10-21 06:56:22 -04:00
Download and install packages and dependencies
```
2017-04-08 17:11:23 -04:00
go get github.com/hashicorp/packer
2016-10-21 06:56:22 -04:00
```
2013-03-23 18:59:17 -04:00
2013-06-28 09:36:01 -04:00
**Note:** There is a great
2013-06-28 11:27:38 -04:00
[introduction and getting started guide ](http://www.packer.io/intro )
2013-06-28 09:36:01 -04:00
for those with a bit more patience. Otherwise, the quick start below
will get you up and running quickly, at the sacrifice of not explaining some
key points.
2013-06-28 16:54:31 -04:00
First, [download a pre-built Packer binary ](http://www.packer.io/downloads.html )
2016-10-27 23:31:57 -04:00
for your operating system or [compile Packer yourself ](CONTRIBUTING.md#setting-up-go-to-work-on-packer ).
2013-03-23 18:59:17 -04:00
2013-06-09 01:35:58 -04:00
After Packer is installed, create your first template, which tells Packer
what platforms to build images for and how you want to build them. In our
case, we'll create a simple AMI that has Redis pre-installed. Save this
2015-12-15 17:33:19 -05:00
file as `quick-start.json` . Export your AWS credentials as the
`AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables.
2013-06-09 01:35:58 -04:00
```json
{
2015-12-15 17:33:19 -05:00
"variables": {
"access_key": "{{env `AWS_ACCESS_KEY_ID` }}",
"secret_key": "{{env `AWS_SECRET_ACCESS_KEY` }}"
},
2013-06-09 01:35:58 -04:00
"builders": [{
"type": "amazon-ebs",
2015-12-15 17:33:19 -05:00
"access_key": "{{user `access_key` }}",
2016-03-16 22:16:35 -04:00
"secret_key": "{{user `secret_key` }}",
2013-06-09 01:35:58 -04:00
"region": "us-east-1",
2017-02-21 13:53:32 -05:00
"source_ami": "ami-af22d9b9",
2017-02-10 02:22:31 -05:00
"instance_type": "t2.micro",
2013-06-09 01:35:58 -04:00
"ssh_username": "ubuntu",
2013-08-08 20:01:41 -04:00
"ami_name": "packer-example {{timestamp}}"
2013-06-09 01:35:58 -04:00
}]
}
```
Next, tell Packer to build the image:
2013-03-23 18:59:17 -04:00
```
2013-05-09 00:09:19 -04:00
$ packer build quick-start.json
2013-03-23 18:59:17 -04:00
...
```
Packer will build an AMI according to the "quick-start" template. The AMI
will be available in your AWS account. To delete the AMI, you must manually
delete it using the [AWS console ](https://console.aws.amazon.com/ ). Packer
builds your images, it does not manage their lifecycle. Where they go, how
they're run, etc. is up to you.
2013-06-09 01:35:58 -04:00
## Documentation
2013-03-23 18:59:17 -04:00
2016-02-05 17:21:10 -05:00
Comprehensive documentation is viewable on the Packer website:
2013-03-23 18:59:17 -04:00
2013-06-09 01:35:58 -04:00
http://www.packer.io/docs
2013-03-23 18:59:17 -04:00
2013-03-23 03:48:20 -04:00
## Developing Packer
2013-03-23 01:41:53 -04:00
2017-04-04 16:39:01 -04:00
See [CONTRIBUTING.md ](https://github.com/hashicorp/packer/blob/master/CONTRIBUTING.md ) for best practices and instructions on setting up your development environment to work on Packer.