packer的基本使用
工具的产生,一定是为了解决某些痛点,那么痛点是?
你们在工作中是不是经常用到各种云?aliyun, aws, digitalOcean and so on?
你们的规模不大不小,经常去云平台上点一点,创建一台实例?
创建完实例以后,运行初始化脚本,安装必须的软件,再做其它操作?
初始化脚本运行慢不说,还特么都是bug?
大哥你心累吗?

有更好的办法,packer了解一下?
在说packer之前,先说啥是基础设施即代码(Infrastracture as Code),传统情况下,搬服务器,插网线这些事儿怎么着也和代码不沾边儿
但这是云的时代了,你上控制台上点一点,实例就生成了,点是你还要点啊,如果你把这些点的动作写成代码,直接运行,一切都完成了。
是不是很爽?
packer就是这么个工具,你在代码里定义基础镜像,规定里面装哪些软件,然后生成一个镜像,然后你就可以直接用这个镜像起动实例了,
实例启动后,该有的都有了,不用去执行什么初始化脚本,你写的代码可以在多个云平台上使用,当然有些云还不支持此工具,毕竟它还很
年轻。
下面我们做个简单的例子,实操一下

用packer生成安装有所需工具的镜像
我使用的云平台是aws,阿里云可能需要装个小插件,请自行阿里一下。
我一会要用packer安装的工具有:
jq:json处理工具
boto3:aws的s3命令行依赖这个
supervisor: 进程管理工具
dotnet: 微软的.net在linux跑的也不错奥
至于这为什么要装这些东西,肯定是我要用啊,你想装其它的都行。

packer这货是用go写的编译好的binary,直接放到/usr/local/bin/下就可以了
下面就写packer的配置文件了呗, 我这里放个demo,详细的见官网
[root@ip-172-31-42-166 packer_workspace]# cat blast_base.json
{
"variables": {
"aws_access_key": "",
"aws_secret_key": "",
"aws_region": "us-west-2"
},
"provisioners": [
{
"type": "ansible",
"user": "ec2-user",
"ansible_env_vars": [
"ANSIBLE_HOST_KEY_CHECKING=False",
"ANSIBLE_SSH_ARGS='-o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s'",
"ANSIBLE_NOCOLOR=True",
"ANSIBLE_ROLES_PATH=../ansible_workspace/roles",
"AWS_ACCESS_KEY_ID={{user `aws_access_key`}}",
"AWS_SECRET_ACCESS_KEY={{user `aws_secret_key`}}"
],
"extra_arguments": [
"--extra-vars",
"aws_region={{user `aws_region`}}"
],
"playbook_file": "./books/initall.yml"
}
],
"builders": [
{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "{{user `aws_region` }}",
"source_ami_filter": {
"filters": {
"image-id": "ami-d874e0a0"
}
},
"instance_type": "t2.micro",
"ssh_username": "ec2-user",
"ami_name": "Blast_base {{timestamp}}"
}
]
}
上面配置文件的意思大概是说我要生成一个镜像,在这个过程中我调用ansible脚本,去安装我想安装的东西
当然你可以不调用ansible,而直接运行shell命令或脚本,但是当安装的东西太多时,那样也不优雅。。。
配置文件写完了,校验一下写的有没有语法问题:
packer validate blast_base.json Template validated successfully.
没有语法错误,那就构建吧:
packer build blast_base.json
稍等一小下,aws镜像已经生了,可以愉快的使用了,其实生成实例也有相关工具,叫terraform,就不介绍了
感觉趣可以自己查官网,这里说的比较简单,就是想起一个抛砖引石的作用,具体用法请看官网。
packer的基本使用的更多相关文章
- 使用packer制作vagrant centos box
使用packer制作vagrant box:centos 制作vagrant box,网上有教程,可以自己step by step的操作.不过直接使用虚拟在VirtualBox中制作vagrant b ...
- Qt程序打包(使用Enigma Virtual Box和BoxedApp Packer封包)
一.使用单文件封包工具 单文件封包工具,顾名思义就是将可执行文件及其相关依赖打包成单个可执行文件的工具. 这里推荐两个单文件封包工具:Enigma Virtual Box和BoxedApp Packe ...
- 在cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- Unity2D Sprite Packer用法介绍
想充分利用图片空间? 我们用来做sprite的图片通常会留有很多空白的地方,我们在画完了sprite之后,这些地方很可能就没有什么作用了. 如果想避免这些资源上的浪费,我们可以把各个sprite做成图 ...
- 【Unity3D游戏开发】之Sprite Packer使用方法 (九)[转]
前置说明: 我们用来做sprite 的图片,通常会留有很多空白的地方,我们在画完了sprite之后,这些地方很可能就没有什么作用了.如果想避免这些资源上的浪费,我们可以把各个sprite做成图集,把图 ...
- UPX 加壳工具:The Ultimate Packer for eXecutables
UPX (the Ultimate Packer for eXecutables)是一款先进的可运行程序文件压缩器.压缩过的可运行文件体积缩小50%-70% ,这样降低了磁盘占用空间.网络上传下载的时 ...
- 1秒破解 js packer 加密
原文:1秒破解 js packer 加密 其实有点标题党了,不过大概就是这个意思. 进入正题, eval(function(p,a,c,k,e,d){e=function(c){return(c< ...
- 转载+自练(莫喷)怎样在cocos2d 2.1.4里面使用动画和Texture Packer
本文实践自 Ray Wenderlich.Tony Dahbura 的文章<How to Use Animations and Sprite Sheets in Cocos2D 2.X>, ...
- Packer piplines and workflow
packer对docker和aws AMI的支持都很好,来上个图: 配套的模版长这样: { "variables": { "name": "webim ...
随机推荐
- Spring配置文件中如何使用外部配置文件配置数据库连接
直接在spring的配置文件中applicationContext.xml文件中配置数据库连接也可以,但是有个问题,需要在url后带着使用编码集和指定编码集,出现了如下问题,&这个符号报错-- ...
- [模拟赛] T3 最优序列
Description 给出一个长度为n(n<=1000)的正整数序列,求一个子序列,使得原序列中任意长度为m的子串中被选出的元素不超过k(k<=m<=10)个,并且选出的元素之和最 ...
- poj 1562 dfs
http://poj.org/problem?id=1562 #include<iostream> using namespace std; ,m=,sum=; ][]; ][]={-,, ...
- MySQL数据库学习二 MSQL安装和配置
2.1 下载和安装MySQL软件 2.1.1 基于客户端/服务器(C/S)的数据库管理系统 服务器:MySQL数据库管理系统 客户端:操作MySQL服务器 2.1.2 MySQL的各种版本 社区版(C ...
- java.lnag.Throwable详细解读
public class Throwable extends Object implemnts Serializable Throwable类是所有错误或异常的超类.只有当对象是此类(或其中之 ...
- Oracle的用户,权限以及角色
一.用户 1.创建用户 创建用户u密码为aa. SQL> create user u identified by aa; 2.为用户赋予权限 这个用户还不能连接数据库,必须为其赋予一些权限才可以 ...
- ArrayList和Vector区别
java基础之ArrayList和Vector的主要区别: List接口下一共实现了三个类:ArrayList,Vector,LinkedList. LinkedList主要保持数据的插入顺序的时候使 ...
- (译文)掌握JavaScript基础--理解this关键字的新思路
普通函数 下面这种就是普通函数 function add(x, y) { return x + y; } 每个普通函数被调用的时候,都相当于有一个this参数传进来. 内部函数this不会是外部函数传 ...
- Go语言标准库_输入/输出
Go语言标准库_输入/输出 转载节选自<Go语言标准库> Reader 接口 type Reader interface { Read(p []byte) (n int, err erro ...
- java 中的JDK封装的数据结构和算法解析(集合类)----链表 List 之 Vector (向量)
Vector 看JDK解释(中文翻译)吧: Vector 类可以实现可增长的对象数组.与数组一样,它包含可以使用整数索引进行访问的组件.但是,Vector 的大小可以根据需要增大或缩小,以适应创建 ...