介绍
Packer,由Hashicorp,是一个命令行工具,用于快速为多个平台和环境创建相同的机器图像. 使用Packer,您可以使用一个配置文件,称为 template,创建一个包含预配置的操作系统和软件的机器图像。
在本教程中,您将使用 Packer 在 Ubuntu 16.04 上配置 Nginx Web 服务器,然后使用 Packer 创建此 Droplet 的截图,并在您的 DigitalOcean 仪表板中立即可用,以便您可以使用它来创建新的 Droplets。
前提条件
在你可以起床和运行与Packer之前,你需要一些东西。
- 一个 Ubuntu 16.04 服务器是按照 Ubuntu 16.04 初始服务器安装指南设置的,包括一个 sudo 非根用户和防火墙。
第1步:下载和安装包装器
登录到您的服务器后,您将下载 Packer 二进制包,为当前用户安装 Packer,并检查您的安装是否成功。
让 Packer 在您的系统上运行的最简单的方法是从官方 Hashicorp 网站(https://releases.hashicorp.com/packer/)下载最新的二进制包。
使用弯曲
实用程序从Hashicorp网站下载二进制包。
1curl -O https://releases.hashicorp.com/packer/0.12.2/packer_0.12.2_linux_amd64.zip
一旦下载,安装unzip
实用程序,并使用它将包内容解密到/usr/local/bin
目录中,使Packer可供所有用户使用:
1sudo apt install -y unzip
2sudo unzip -d /usr/local/bin packer_0.12.2_linux_amd64.zip
通过检查packer
在命令行上可用来验证安装是否成功:
1packer
成功的安装将产生如下:
1[secondary_label Output]
2usage: packer [--version] [--help] <command> [<args>]
3
4Available commands are:
5 build build image(s) from template
6 fix fixes templates from old versions of packer
7 inspect see components of a template
8 push push a template and supporting files to a Packer build service
9 validate check that a template is valid
10 version Prints the Packer version
Packer 现在已安装并在您的机器上工作. 在下一步,您将设置一个项目目录并配置模板以生成一个基本的 Ubuntu 快照。
步骤 2 — 配置数字海洋构建器
我们希望Packer创建一个Droplet,安装一些软件和配置文件,然后将Droplet变成一个图像,我们可以使用它来创建新的机器。
在 Packer-speak 中,一个 builder 是一个 JSON 对象,它包含您希望 Packer 创建的图像的蓝图。 使用digitalocean
构建程序,您将指示 Packer 创建一个 512 MB Ubuntu 16.04 Droplet 将于 NYC1 地区推出。
创建并更改到一个新的目录,其中将包含我们将在本教程中创建的模板和配置文件:
1mkdir ~/packerProject
2cd ~/packerProject
现在你有一个项目目录,打开一个名为template.json
的新文件,在你的文本编辑器:
1nano ~/packerProject/template.json
每个构建者都需要进入template.json
的构建者
部分. 现在添加此部分并将digitalocean
构建者添加到文件中,将此代码放入文件中:
1[label ~/packerProject/template.json]
2{
3 "builders": [
4 {
5 "type": "digitalocean"
6 }]
7}
类型
键定义了构建者Packer用什么来创建您的图像,而构建者digitalocean
创建了DigitalOceanDropplets,由此 Packer创建了快照。
Packer 现在知道你想为 DigitalOcean 创建一个图像,但它仍然需要一些额外的关键值对才能完成构建。
通过添加这些键和值来完成配置您的Droplet,以生成在NYC1地区发布的512 MB Ubuntu 16.04 Droplet的快照。
1[label ~/packerProject/template.json]
2{
3 "builders": [
4 {
5 "type": "digitalocean",
6 "ssh_username": "root",
7 "api_token": "YOUR_DIGITALOCEAN_API_TOKEN",
8 "image": "ubuntu-16-04-x64",
9 "region": "nyc1",
10 "size": "512mb"
11 }]
12}
Packer 使用 ssh_username
值连接到 Droplets. 此值需要设置为 "root" 以便 Packer 正常工作。
保存template.json
并退出文本编辑器。
上一个代码组包含创建 DigitalOcean Droplet 所需的最低配置量,但如下表所示,还有其他配置选项可用:
| 键 数值 ====== | --—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— | 用于访问您的账户的 API 符号 。 也可以通过环境变量`DIGITALOCEAN_API_TOKEN'(如果设置的话)来指定。 |
图像 ' * 弦 * 是 * * 要使用的基础图像的名称( 或 slock) 。 此图像将用来启动一个新的 Droplet 并提供它 。 见[https://developers.digitalocean.com/documentation/v2/# list-all-images](https://developers.digitalocean.com/documentation/v2/#list-all-images),关于如何获得被接受的图像名称/slugs列表的细节. |
区域 ' ==== 发射"滴"号的区域名称(或"涕"). 因此,该地区将可提供简介。 见[https://developers.digitalocean.com/documentation/v2/# list-all-regies] (https://developers.digitalocean.com/documentation/v2/# list-all-regions) 被接受的区域名称/slugs. |