Packer创建阿里云本地镜像

通过手工创建在本地镜像,并且上传到云环境是一个复杂而易错的过程,而packer的出现极大的降低了这种复杂度,本文详细了讲解了如何在ubuntu(16.04或者更高版本)系统基于packer创建centos 6.8的镜像并上传到阿里云自定义镜像的全过程。

1.准备

1.1安装kvm

  • 首先查看cpu是否支持kvm,执行如下命令,如果有类似下面的输出,就是支持kvm:
# egrep "(svm|vmx)" /proc/cpuinfopat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 
  • 打开终端然后执行如下命令安装kvm :
sudo apt-get install qemu-kvm qemu virt-manager virt-viewer  libvirt-bin bridge-utils
  • 安装结束后,可以执行如下命令,会出现virt-manager的界面,如果通过通过GUI创建虚拟机,那么kvm就安装完了
 sudo virt-manager

1.2申请工单

由于阿里云的镜像导入功能默认并不是开放的,所以在运行本示例前需要通过工单申请开通镜像上传功能,可以登录阿里云控制台,导航到镜像列表栏目,如果右部的”刷新“按钮旁边象下图一样没有”导入镜像“按钮,就需要“点击顶部的“工单”按钮,然后在工单管理页面通过如下步骤提交工单:

”提交工单“->"云服务器 ECS”->点击“提问”按钮->"镜像咨询“->"4. 如何把本地物理镜像导入到 ECS 中使用?"

在低部选择”提交工单”按钮。

在"问题描述:“文本框中输入如下内容,然后填写其它必要信息,提交工单,等候工作人员批准。

在访问ECS镜像复制和镜像上传功能时没有权限。
CopyImage/CancelCopyImage/ImportImage/AliyunECSImageImportDefaultRole/AliyunECSImageImportRolePolicy  

如果理由合理,一般一天左右,工单就会被批准,这些镜像列表栏目的右上部就会出现如下图的”导入镜像“按钮

1.3开通OSS

由于阿里云镜像上传功能需要通过OSS中转,所以如果还没有开通OSS,可以通过点击如下OSS控制台按照开通向导,一步一步的输入必要信息来开通OSS,由于过程并不复杂,本文就不赘述了。

2.安装packer和阿云插件

首先从Packer官网下载对应操作系统的安装包,点击如下图的官网链接下载packer安装包

然后打开终端,导航到下载目录下,执行如下命令,如果得到如下图的输出,packer就安装好了:

#unzip packer_0.12.3_linux_amd64.zip
#sudo mv packer /usr/local/bin/
#packer
usage: packer [--version] [--help] <command> [<args>]Available commands are:build       build image(s) from templatefix         fixes templates from old versions of packerinspect     see components of a templatepush        push a template and supporting files to a Packer build servicevalidate    check that a template is validversion     Prints the Packer version

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

#tar -xvf  packer-builder-alicloud-ecs_linux-amd64.tgz
#sudo mv bin/* /usr/local/bin/
# ls /usr/local/bin | grep packerpacker                                  packer-builder-alicloud-ecs               packer-post-processor-alicloud-import

3.本地镜像的制作

从阿里云的官方插件站点下载 centos.json 和ks.cfg,cetnos.json的内容如下,

{"variables": {"box_basename": "centos-6.8","build_timestamp": "{{isotime \"20060102150405\"}}","cpus": "1","disk_size": "4096","git_revision": "__unknown_git_revision__","headless": "","http_proxy": "{{env `http_proxy`}}","https_proxy": "{{env `https_proxy`}}","iso_checksum": "0ca12fe5f28c2ceed4f4084b41ff8a0b","iso_checksum_type": "md5","iso_name": "CentOS-6.8-x86_64-minimal.iso","ks_path": "centos-6.8/ks.cfg","memory": "512","metadata": "floppy/dummy_metadata.json","mirror": "http://mirrors.aliyun.com/centos","mirror_directory": "6.8/isos/x86_64","name": "centos-6.8","no_proxy": "{{env `no_proxy`}}","template": "centos-6.8-x86_64","version": "2.1.TIMESTAMP"},"builders":[{"boot_command": ["<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}<enter><wait>"],"boot_wait": "10s","disk_size": "{{user `disk_size`}}","headless": "{{ user `headless` }}","http_directory": "http","iso_checksum": "{{user `iso_checksum`}}","iso_checksum_type": "{{user `iso_checksum_type`}}","iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}","output_directory": "packer-{{user `template`}}-qemu","shutdown_command": "echo 'vagrant'|sudo -S /sbin/halt -h -p","ssh_password": "vagrant","ssh_port": 22,"ssh_username": "root","ssh_wait_timeout": "10000s","type": "qemu","vm_name": "{{ user `template` }}.raw",      "net_device": "virtio-net","disk_interface": "virtio","format": "raw"}],
"post-processors":[{"type":"alicloud-import","oss_bucket_name": "packer","image_name": "packer_import","image_os_type": "linux","image_platform": "CentOS","image_architecture": "x86_64","image_system_size": "40","region":"cn-beijing"}]
}

在终端中执行如下命令设置阿里云访问的AK

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

你可以从阿里云控制台获取访问的AK,打开控制台登录后,点击页面右上角的登录名,出现如下图菜单,在菜单中选择accesskeys按钮

然后在Access key管理页面点击右上角的"创建Access Key"按钮,创建新的Access Key ID和Access Key Secret,将值替换模板中或者设置如上的环境变量。
在终端中,导航到centos.json文件所在的目录,执行

#mkdir -p http/centos-6.8
#mv ks.cfg http/centos-6.8/
#packer build alicloud.jsonqemu output will be in this color.==> qemu: Downloading or copying ISOqemu: Downloading or copying: http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso
==> qemu: Creating hard drive...
==> qemu: Starting HTTP server on port 8665
................................................==> qemu: Running post-processor: alicloud-importqemu (alicloud-import): Deleting import source https://oss-cn-beijing.aliyuncs.com/packer/centos_x86_64
Build 'qemu' finished.==> Builds finished. The artifacts of successful builds are:
--> qemu: Alicloud images were created:cn-beijing: m-2zecept2coytitjjixyc

由于镜像有4G的大小,上传到OSS会是一个漫长的过程,如果中间没有出错,当看到成功提示的结果,你就可以如下图在镜像列表中看到创建的自定义镜像。

4.展望

从上面的过程看,即使有了packer的帮助,制作一个本地的自定的镜像也不是一件容易的事情,但是随着开源社区的发展,对于常用的镜像模板,会非常容易的从社区获得,而且packer本身也比较年轻,随着功能的不断完善,镜像的制作一定会变得越来越容易。也希望大家能够为packer的完善贡献自己的力量。

packer的资源库

阿里云开源插件工具资源库

Packer创建阿里云本地镜像相关推荐

  1. 镜像即代码:基于Packer构建阿里云镜像

    什么是Packer Packer是HashiCorp推出的一款工具,旨在提供简易的方式自动化构建镜像.通过Packer,你只需要在配置文件中指明镜像构建所需的基本信息及期望安装到镜像中的软件及配置,即 ...

  2. 企业版Docker4——如何通过阿里云的镜像加速器快速拉取镜像到本地

    以下所有的实操都是在rhel7.5上 1.为什么要使用阿里云的镜像加速器? 构建容器的镜像全部在下面这个网站里面,但是这个站点在国外,对于我们来说使用很不方便,下载非常慢 国内的阿里云上有自己已经拉取 ...

  3. Docker学习(4)——如何通过阿里云的镜像加速器快速拉取镜像到本地

    1.为什么要使用阿里云的镜像加速器? 构建容器的镜像全部在下面这个网站里面,但是这个站点在国外,对于我们来说使用很不方便,下载非常慢 国内的阿里云上有自己已经拉取过来的镜像可以供我们直接使用 但是如果 ...

  4. Docker学习3 - 阿里云个人镜像私库、本地私库registry

    文章目录 私库 自建个人镜像并且推到阿里云私库上 阿里云 本地服务器的私库 registry - 私服镜像仓库(类似本地的DockerHub) 私库 自建个人镜像并且推到阿里云私库上 镜像云发布流程 ...

  5. oracle 朱志辉_阿里云自定义镜像

    应用迁云之镜像迁移-(5)阿里云上跨VPC和区域.账号镜像迁移实践 目前在阿里云云上的镜像迁移主要需求场景 n  跨VPC迁移ECS实例比如从VPC A迁移到VPC B环境中 n  跨区域迁移EC ...

  6. centos7镜像加速_使用阿里云容器镜像服务托管私有Docker镜像

    一个只用markdown语法编写文章的90后野路子Web架构师,每天都分享一些有用的知识点,欢迎关注- 前言 概述 本文主要讲解如何托管自己的Docker镜像到阿里云容器镜像服务ACR上,以及如何使用 ...

  7. 如何实现阿里云容器镜像服务反向访问代理?

    简介:本文会先介绍镜像推送/拉取过程的交互逻辑来梳理需要代理的所有服务,再通过搭建一个公网 HTTPS 反向代理来访问容器镜像服务来向您展示多场景代理访问模式原理. 真实业务场景可能很复杂,因安全.合 ...

  8. 实现阿里云容器镜像服务反向访问代理

    简介: 本文会先介绍镜像推送/拉取过程的交互逻辑来梳理需要代理的所有服务,再通过搭建一个公网 HTTPS 反向代理来访问容器镜像服务来向您展示多场景代理访问模式原理. 真实业务场景可能很复杂,因安全. ...

  9. docker 修改阿里镜像源_使用阿里云容器镜像服务托管私有Docker镜像

    一个只用markdown语法编写文章的90后野路子Web架构师,每天都分享一些有用的知识点,欢迎关注- 前言 概述 本文主要讲解如何托管自己的Docker镜像到阿里云容器镜像服务ACR上,以及如何使用 ...

最新文章

  1. linux socket recv函数 MSG_PEEK标志介绍
  2. think php a方法,PHP_ThinkPHP之A方法实例讲解,ThinkPHP的A方法用于在内部实例 - phpStudy...
  3. 国内CVPR和图像处理领域的公司和研究机构
  4. 怎么做mysql查询系统_mysql数据库系统学习(一)---一条SQL查询语句是如何执行的?...
  5. Java高级进阶学习资料!java开发环境的搭建是什么意思
  6. 将本地代码上传至github
  7. 天桥调参师秘籍:一份深度学习超参微调技术指南
  8. linux磁盘划分注意,划分磁盘阵列注意问题
  9. linux 防火墙 iptables的简单使用
  10. 转:Ruby 的性能 与如何选用正确的framework来做web
  11. Ogre1.7的地形、天空与雾
  12. 【5】Java内存访问重排序vs volatile
  13. 碰撞检测之 AABB 包围盒
  14. 圆梦天宫,英雄凯旋—从神州十三号看IP技术在航天测控通信网的应用
  15. php美颜滤镜,美颜滤镜的虚幻不如一支玻尿酸来的真实
  16. Excel基础学习笔记
  17. 计算机中应用管理在哪里,应用程序管理器在哪里
  18. java 超时状态_Java任务超时处理机制实现【原创】
  19. 观点丨如何让劳动价值像资本一样自由流动与交易
  20. php查看其配置文件路径,php配置文件php.ini所在路径如何查看?

热门文章

  1. 按住 ctrl 并滚动鼠标滚轮才可缩放地图_Firefox 73 将引入全局缩放功能,在所有网站都可适用...
  2. 第1节 IMPALA:4、5、linux磁盘的挂载和上传压缩包并解压
  3. 搭建Redis服务器
  4. mybatis:延迟加载时不要在get/set方法上面添加final关键字(原创)
  5. 【费用流】BZOJ1061: [Noi2008]志愿者招募(这题超好)
  6. js 实现图片旋转角度
  7. BusyBox telnet配置
  8. UML学习-活动图创建
  9. 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合...
  10. 关于C++中vector和set使用sort方法进行排序