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
|
2017-06-05 14:17:47 -04:00
|
|
|
[appveyor-badge]: https://ci.appveyor.com/api/projects/status/miavlgnp989e5obc/branch/master?svg=true
|
2016-10-21 06:56:22 -04:00
|
|
|
[appveyor]: https://ci.appveyor.com/project/hashicorp/packer
|
2018-04-02 23:09:32 -04:00
|
|
|
[godoc-badge]: https://godoc.org/github.com/hashicorp/packer?status.svg
|
|
|
|
[godoc]: https://godoc.org/github.com/hashicorp/packer
|
|
|
|
[report-badge]: https://goreportcard.com/badge/github.com/hashicorp/packer
|
|
|
|
[report]: https://goreportcard.com/report/github.com/hashicorp/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
|
2017-06-21 23:35:55 -04:00
|
|
|
* Mailing list: [Google Groups](https://groups.google.com/forum/#!forum/packer-tool)
|
2013-06-09 01:56:34 -04:00
|
|
|
|
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
|
2018-02-16 15:06:06 -05:00
|
|
|
comes out of the box with support for many platforms, the full list of which can
|
|
|
|
be found at https://www.packer.io/docs/builders/index.html.
|
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
|
2017-06-21 23:35:55 -04:00
|
|
|
[introduction and getting started guide](https://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.
|
|
|
|
|
2018-04-02 13:59:59 -04:00
|
|
|
First, [download a pre-built Packer
|
|
|
|
binary](https://www.packer.io/downloads.html) for your operating system or
|
|
|
|
[compile Packer
|
|
|
|
yourself](https://github.com/hashicorp/packer/blob/master/.github/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
|
|
|
|
2017-06-21 23:35:55 -04:00
|
|
|
https://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
|
|
|
|
2018-04-02 13:55:13 -04:00
|
|
|
See
|
|
|
|
[CONTRIBUTING.md](https://github.com/hashicorp/packer/blob/master/.github/CONTRIBUTING.md)
|
|
|
|
for best practices and instructions on setting up your development environment
|
|
|
|
to work on Packer.
|