Packer创建阿里云本地镜像

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
对象存储 OSS,20GB 3个月
云服务器ECS,u1 2核4GB 1个月
简介: Packer创建阿里云本地镜像 通过手工创建在本地镜像,并且上传到云环境是一个复杂而易错的过程,而packer的出现极大的降低了这种复杂度,本文详细了讲解了如何在ubuntu(16.04或者更高版本)系统基于packer创建centos 6.8的镜像并上传到阿里云自定义镜像的全过程。

Packer创建阿里云本地镜像

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

1.准备

1.1安装kvm

  • 首先查看cpu是否支持kvm,执行如下命令,如果有类似下面的输出,就是支持kvm:
# egrep "(svm|vmx)" /proc/cpuinfo

pat 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安装包 screenshot

然后打开终端,导航到下载目录下,执行如下命令,如果得到如下图的输出,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 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_linux-amd64.tgz
#sudo mv bin/* /usr/local/bin/
# ls /usr/local/bin | grep packer

packer                                  packer-builder-alicloud-ecs               packer-post-processor-alicloud-import

3.本地镜像的制作

从阿里云的官方插件站点下载 centos.jsonks.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按钮
screenshot
然后在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.json

qemu output will be in this color.

==> qemu: Downloading or copying ISO
    qemu: 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-import
    qemu (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的资源库

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

目录
相关文章
|
2月前
|
弹性计算 数据安全/隐私保护
【阿里云服务器镜像】雾锁王国(Enshrouded)自动部署教程
本文将为您提供极简部署雾锁王国服务器的指引,「仅需轻点三次鼠标,即可完成开服」,和自己的朋友一起畅玩雾锁王国。雾锁王国(Enshrouded)作为一款热门多人在线游戏,为了给玩家提供稳定、流畅的联机体验,阿里云提供了高效便捷的快速部署解决方案,本文将为大家分享阿里云一键部署雾锁王国联机服务器详细教程。
 【阿里云服务器镜像】雾锁王国(Enshrouded)自动部署教程
|
4月前
|
Java
dockerfile打包阿里云镜像 springboot实战项目(阿里云镜像仓失败 处理)
dockerfile打包阿里云镜像 springboot实战项目(阿里云镜像仓失败 处理)
|
2月前
|
Kubernetes 持续交付 容器
云效代码仓库问题之链接获取如何解决
云效镜像是指存储在阿里云效服务中的容器镜像,它们可以用于持续集成和持续部署(CI/CD)流程中;本合集将介绍如何在云效平台上管理和使用镜像资源,以及常见的镜像问题和解决办法。
79 0
云效代码仓库问题之链接获取如何解决
|
1月前
|
存储 弹性计算 Linux
阿里云ECS(CentOS镜像)安装docker
阿里云ECS(CentOS镜像)安装docker
374 0
|
2月前
|
弹性计算 Linux 数据中心
阿里云服务器镜像是什么?如何选择镜像?
阿里云服务器镜像是什么?如何选择镜像?阿里云服务器镜像是云服务器的装机盘,镜像是为云服务器安装操作系统的。云服务器镜像系统怎么选择?云服务器操作系统镜像分为Linux和Windows两大类,Linux可以选择Alibaba Cloud Linux,Windows可以选择Windows Server 2022数据中心版64位中文版。阿里云百科分享什么是镜像以及云服务器镜像系统的选择方法
|
2月前
|
弹性计算 运维 安全
阿里云服务器linux和windows镜像有啥区别?
阿里云服务器linux和windows镜像有啥区别?阿里云服务器镜像Windows和Linux操作系统有什么区别?性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正版授权,用户不需要额外支付许可费用,如何选择?看用户自己的应用程序情况
|
2月前
|
弹性计算 运维 安全
阿里云服务器镜像怎么选?Linux和Windows有啥区别?
阿里云服务器镜像怎么选?Linux和Windows有啥区别?阿里云服务器镜像Windows和Linux操作系统有什么区别?性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正版授权,用户不需要额外支付许可费用,如何选择?看用户自己的应用程序情况
66 0
|
3月前
|
人工智能 大数据 Anolis
龙蜥多款镜像登陆阿里云 ACR 制品中心 AI /大数据镜像专场推荐榜
龙蜥社区作为 ACR 制品中心的重要合作伙伴,持续贡献丰富、安全、便捷、稳定的容器镜像,所贡献的镜像连续上榜 ACR 制品中心!
|
3月前
|
Java Maven Docker
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
108 0
|
3月前
|
弹性计算 Linux Windows
阿里云ECS更换系统时提示主机名不支持windows镜像要求的解决方法
在阿里云上,我们更换ECS云服务器操作系统镜像从Linux镜像更换为Windows镜像时,常常会遇到提示主机名格式不支持windows镜像要求,这是什么缘故呢,那如何才能更改这个系统不提示呢?下面给大家分享一下修改主机名的方法:
301 0

热门文章

最新文章