实战Packer创建chef server镜像

简介: Packer简介 Packer是一个从单一配置文件为多平台创建一致镜像的轻量级的开源工具。能够运行在主流的操作系统上,并行高效的创建多平台的虚拟机镜像,它为代码即基础结构提供了坚实的基础,通过packer较大的降低了了创建用户自定义镜像的难度,并且将创建镜像的过程从人工的随机过程变成可以配置管理代码,可测试的过程,从而减少了用户应用上云的障碍之一。

Packer简介

Packer是一个从单一配置文件为多平台创建一致镜像的轻量级的开源工具。能够运行在主流的操作系统上,并行高效的创建多平台的虚拟机镜像,它为代码即基础结构提供了坚实的基础,通过packer较大的降低了了创建用户自定义镜像的难度,并且将创建镜像的过程从人工的随机过程变成可以配置管理代码,可测试的过程,从而减少了用户应用上云的障碍之一。下面就从实战的角度来构建一个chef server镜像来学习packer的使用。

Packer的安装

首先从Packer官网下载对应操作系统的安装包,本文以Mac OS X x64为例,点击如下图的官网链接下载packer安装包screenshot
然后打开终端,导航到下载目录下,执行如下命令,如果得到如下图的输出,packer就安装好了:

#unzip packer_0.12.3_darwin_amd64.zip
#sudo mv packer /usr/local/bin/
#packer
usage: packer [--version] [--help] <command> [<args>]

Available commands are:
    build       build image(s) from template
    fix         fixes templates from old versions of packer
    inspect     see components of a template
    push        push a template and supporting files to a Packer build service
    validate    check that a template is valid
    version     Prints the Packer version

由于阿里云的packer插件提交还在流程中,所以还需要从阿里云的开源站点下载阿里云的packer插件,然后执行如下命令,如果输出如下,插件就安装好了:

#tar -xvf  packer-builder-alicloud-ecs_darwin-amd64.tgz
#sudo mv bin/packer-builder-alicloud-ecs /usr/local/bin/
# ls /usr/local/bin | grep packer

packer                                  packer-builder-alicloud-ecs

创建chef server

从阿里云的packer插件代码站点下载样例文件alicloud.jsonchef.shuser_data.sh到同一目录,打开alicloud.json文件内容如下:

{
  "variables": {
    "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
    "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
  },
  "builders": [{
    "type":"alicloud-ecs",
    "access_key":"{{user `access_key`}}",
    "secret_key":"{{user `secret_key`}}",
    "region":"cn-beijing",
    "image_name":"packer_chef2",
    "source_image":"ubuntu_14_0405_64_40G_base_20170222.vhd",
    "ssh_username":"root",
    "instance_type":"ecs.n1.medium",
    "io_optimized":"true",
    "image_force_delete":"true",
    "ssh_password":"Test1234",
    "user_data_file":"examples/alicloud/chef/user_data.sh"
  }],
  "provisioners": [{
    "type": "file",
    "source": "examples/alicloud/chef/chef.sh",
    "destination": "/root/"    
   },{
    "type": "shell",
    "inline": [
    "cd /root/",
    "chmod 755 chef.sh",
    "./chef.sh",
    "chef-server-ctl  reconfigure"
    ]
  }]
}

将其中的"variable"部分的"access_key"和"secret_key"的值替换为你自已的access key和secret key,或者在终端中执行

#export ALICLOUD_ACCESS_KEY="<你的access_key>"
#export ALICLOUD_SECRET_KEY="<你的secret_key>"

你可以从阿里云控制台获取访问的AK,打开控制台登录后,点击页面右上角的登录名,出现如下图菜单,在菜单中选择accesskeys按钮
screenshot
然后在Access key管理页面点击右上角的"创建Access Key"按钮,创建新的Access Key ID和Access Key Secret,将值替换模板中或者设置如上的环境变量。
然后修改如下两行的值

"user_data_file":"examples/alicloud/chef/user_data.sh"
"source": "examples/alicloud/chef/chef.sh",

"user_data_file":"user_data.sh"
"source": "chef.sh",

在文件所在的目录执行

#packer build alicloud.json

alicloud-ecs output will be in this color.

==> alicloud-ecs: Force delete flag found, skipping prevalidating alicloud image name
    alicloud-ecs: Found image ID: ubuntu_14_0405_64_40G_base_20170222.vhd
==> alicloud-ecs: Not using temporary keypair
==> alicloud-ecs: Start create alicloud vpc
==> alicloud-ecs: Start creating vswitch...
==> alicloud-ecs: Start creating security groups...
==> alicloud-ecs: Start creating alicloud instance
.............

运行正常结束后,你就可以登录控制台镜像列表查看到刚才创建的镜像了。
screenshot


然后基于这个自定义的镜像创建ECS实例,我的结果如下图,(注:如果创建的ECS实例是经典网络,需要登录到ECS实例上手动执行user_data.sh脚本)
screenshot
然后在浏览器中输入如下地址:https://123.56.16.159/
你就可以看到chef的web界面了。(注:注意更改成你自已实例的IP地地址)
screenshot

展望

诚然,引入新的机制,会引入相应的学习曲线,对于packer来说,编写可用的镜像模板文件不是一件简单的事情,但是随着开源的盛行,很多常用的的模板都能够从github上找到,例如如下资源库中就包含大量的模板,当然,由于阿里云的packer插件支持才刚刚起步,所以也欢迎大家以阿里云官方packer插件资源库来贡献一份力量。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 关系型数据库 数据库
SQL Server 简介与 Docker Compose 部署
SQL Server 是由微软公司开发的一款强大的关系型数据库管理系统(RDBMS),广泛应用于企业级应用程序和数据存储。使用 Docker Compose,您可以轻松地将 SQL Server 实例部署到容器化环境中,并方便地进行数据库管理。在本文中,我将简要介绍 SQL Server 的基本概念,并详细阐述如何使用 Docker Compose 部署 SQL Server 容器。
456 2
SQL Server 简介与 Docker Compose 部署
|
3月前
|
Kubernetes Linux Docker
【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误
【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误
|
4月前
|
Docker 容器
docker desktop安装es并连接elasticsearch-head:5
以上就是在Docker Desktop上安装Elasticsearch并连接Elasticsearch-head:5的步骤。
213 2
|
6月前
|
监控 Java 数据库
Zabbix【部署 05】 Docker部署Zabbix Server Agent Agent2 Web interface及 Java-Gate-Way(详细启动脚本及踩坑记录)不定时更新
Zabbix【部署 05】 Docker部署Zabbix Server Agent Agent2 Web interface及 Java-Gate-Way(详细启动脚本及踩坑记录)不定时更新
521 0
|
安全 虚拟化 Windows
server03 从源码到镜像
server03 从源码到镜像
|
大数据 调度 数据库
Azkaban--安装部署--solo server 模式安装--azkaban 使用初体验 | 学习笔记
快速学习 Azkaban--安装部署--solo server 模式安装--azkaban 使用初体验
563 0
Azkaban--安装部署--solo server 模式安装--azkaban 使用初体验  | 学习笔记
|
JavaScript Docker Windows
Windows下构建Node.js的Docker Nano Server基础镜像
本文讲的是Windows下构建Node.js的Docker Nano Server基础镜像【编者的话】本文介绍了如何在Windows下制作Nano Server的Docker镜像,并用镜像来部署Node.js应用。
2586 0
|
XML 缓存 应用服务中间件
利用Docker快速构建基于devpi的企业级私有PyPI Server
我们平常使用 pip 命令安装 Python 包时,默认是去 https://pypi.python.org/simple/ 源查找相应的包下载并安装的,但是在企业内网环境我们需要发布一些私有包提供给内部用户使用时,就需要搭建自己的 PyPI Server了。
1437 0
利用Docker快速构建基于devpi的企业级私有PyPI Server
|
NoSQL 关系型数据库 MySQL
PassJava 开源(十)之 安装docker
PassJava 开源(十)之 安装docker
181 0
PassJava 开源(十)之 安装docker
|
jenkins Linux 持续交付
Jenkins - Linux下启动Jenkins报错hudson.WebAppMain#contextDestroyed: Shutting down a Jenkins instance that was still starting up
Jenkins - Linux下启动Jenkins报错hudson.WebAppMain#contextDestroyed: Shutting down a Jenkins instance that was still starting up
381 0
Jenkins - Linux下启动Jenkins报错hudson.WebAppMain#contextDestroyed: Shutting down a Jenkins instance that was still starting up