工具的产生,一定是为了解决某些痛点,那么痛点是?

你们在工作中是不是经常用到各种云?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的基本使用的更多相关文章

  1. 使用packer制作vagrant centos box

    使用packer制作vagrant box:centos 制作vagrant box,网上有教程,可以自己step by step的操作.不过直接使用虚拟在VirtualBox中制作vagrant b ...

  2. Qt程序打包(使用Enigma Virtual Box和BoxedApp Packer封包)

    一.使用单文件封包工具 单文件封包工具,顾名思义就是将可执行文件及其相关依赖打包成单个可执行文件的工具. 这里推荐两个单文件封包工具:Enigma Virtual Box和BoxedApp Packe ...

  3. 在cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  4. Unity2D Sprite Packer用法介绍

    想充分利用图片空间? 我们用来做sprite的图片通常会留有很多空白的地方,我们在画完了sprite之后,这些地方很可能就没有什么作用了. 如果想避免这些资源上的浪费,我们可以把各个sprite做成图 ...

  5. 【Unity3D游戏开发】之Sprite Packer使用方法 (九)[转]

    前置说明: 我们用来做sprite 的图片,通常会留有很多空白的地方,我们在画完了sprite之后,这些地方很可能就没有什么作用了.如果想避免这些资源上的浪费,我们可以把各个sprite做成图集,把图 ...

  6. UPX 加壳工具:The Ultimate Packer for eXecutables

    UPX (the Ultimate Packer for eXecutables)是一款先进的可运行程序文件压缩器.压缩过的可运行文件体积缩小50%-70% ,这样降低了磁盘占用空间.网络上传下载的时 ...

  7. 1秒破解 js packer 加密

    原文:1秒破解 js packer 加密 其实有点标题党了,不过大概就是这个意思. 进入正题, eval(function(p,a,c,k,e,d){e=function(c){return(c< ...

  8. 转载+自练(莫喷)怎样在cocos2d 2.1.4里面使用动画和Texture Packer

    本文实践自 Ray Wenderlich.Tony Dahbura 的文章<How to Use Animations and Sprite Sheets in Cocos2D 2.X>, ...

  9. Packer piplines and workflow

    packer对docker和aws AMI的支持都很好,来上个图: 配套的模版长这样: { "variables": { "name": "webim ...

随机推荐

  1. 笔记:MyBatis XML配置详解

    MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配置 properties ...

  2. 使用了旧版nuget的.net项目在git中的问题

    曾几何时,使用nuget包管理项目依赖还需要将nuget执行程序及其配置文件包含在项目中. 如上图所示,在解决方案文件夹中,有专门为nuget程序设置的 .nuget 子目录. 当将项目纳入git管理 ...

  3. 机器学习(1) - TensorflowSharp 简单使用与KNN识别MNIST流程

    机器学习是时下非常流行的话题,而Tensorflow是机器学习中最有名的工具包.TensorflowSharp是Tensorflow的C#语言表述.本文会对TensorflowSharp的使用进行一个 ...

  4. react 实用的性能优化方式

    react 组件渲染分为初始化渲染和更新渲染,当我们更新某个组件的时候,只是想关键路径上组件的render,但react的默认做法是调用所以组件的reder,再生成虚拟dom进行对比,如不变则不进行更 ...

  5. c++ --> cin和cout输入输出格式

    cin和cout输入输出格式 Cout 输出 1>. bool型输出 cout << true <<" or " << false < ...

  6. 最近用spring4.x整合Jackson------>java.lang.ClassNotFoundException:

    最近用spring4.x整合Jackson,结果莫名其妙的一直报错,网上收索的结果都是在maven或者gradle的环境下配置依赖条件解决的:但是eclipseIDE环境下的jar包应该是会自动依赖影 ...

  7. SQL注入之Sqli-labs系列第三篇

    废话不在多说  let's go!   继续挑战第三关(Error Based- String) 1.访问地址,加入参数后 and 1=1和and 1=2进行测试,木有任何动静 2.再使用 ' 出现报 ...

  8. Jmeter中正则表达式提取器使用详解

    在使用Jmeter过程中,会经常使用到正则表达式提取器提取器,虽然并不直接涉及到请求的测试,但是对于数据的传递起着很大的作用,本篇博文就是主要讲解关于正则表达式及其在Jmeter的Sampler中的调 ...

  9. java.util.zip

    使用java自带的类 java.util.zip进行文件/目录的压缩的话,有一点不足,不支持中文的名件/目录命名,如果有中文名,那么打包就会失败.本人经过一段时间的摸索和实践,发现在一般的Ant.ja ...

  10. HTTP缓存带来的“bug”--HTTP 协议 Cache-Control

    问题描述 先说背景.网站是用PHP开发的,未用任何框架,代码结构也非常简单.运行于阿里云服务器,并采用其CDN来做分发.根据业务需求,有的页面会判断用户浏览器类型,依此来选择PC或者手机端内容. 在一 ...