Packer是一款可以创建自定义镜像的开源工具。Packer包含构建器(Builder)、配置器(Provisioner)、后处理器(Post-Processor)三个组件,通过json格式的模板文件,可以灵活组合这三种组件并行地、自动化地创建镜像文件。使用Packer通过配置代码的形式,降低了创建私有镜像复杂度,并且将创建镜像的过程变成可以配置管理代码的形式,在支持用户灵活定制个性化镜像的同时,也为镜像在不同云平台间的切换提供了一种新的途径。
本节以在CentOS 7.4 64bit云服务器中创建Ubuntu 16.04 Server 64bit私有镜像并上传到公有云平台为例,介绍使用Packer创建镜像的操作步骤。
不支持Packer使用整机镜像作为源镜像来创建私有镜像。
wget --no-check-certificate https://releases.hashicorp.com/packer/1.4.2/packer_1.4.2_linux_amd64.zip
使用命令env | grep PATH打印环境变量,查看环境变量PATH是否包含Packer的安装目录。
如果环境变量PATH中没有包含Packer安装目录,请依次使用以下命令,将Packer的安装路径添加到环境变量PATH中:
使用Packer创建镜像,需要一个json格式的模板文件。在模板文件中,您需要指定构建器、配置器,还可以指定后处理器。在配置器中,您可以指定对源镜像的任何操作,可以指定安装软件也可以对相关配置做修改。在本示例中,我们使用后处理器重定向manifest的输出路径,如果您的Packer模板文件中有多个builders(构建器),你可以通过manifest的输出内容,找到每个builder创建镜像的ID。关于构建器、配置器以及后处理器的详细介绍请参考Packer官方文档。
本节操作以Shell配置器为例。
{ "builders": [{ "type": "openstack", "identity_endpoint": "https://iam.xxx.com/v3", "tenant_name": "xxx", "domain_name": "domain_name", "username": "username", "password": "password", "ssh_username": "root", "region": "xxx", "image_name": "Ubuntu-image-updating-powered-by-Packer", "instance_name": "Ubuntu-image-updating-powered-by-Packer", "source_image": "f1dd2272-7041-479e-9663-646632b6ac00", "availability_zone": "xxx", "flavor": "s3.medium.2", "use_blockstorage_volume": true, "networks": ["11d661c4-e41f-487f-a6f6-9b88d623dd5d"], "floating_ip": "8f686f9a-3408-4fdd-be75-ea768065800c" }], "provisioners": [{ "inline": [ "apt-get update -y" ], "inline_shebang": "/bin/sh -x", "type": "shell", "skip_clean": true }], "post-processors": [{ "strip_path": true, "output": "packer-template-ubuntu-updating-result.log", "type": "manifest" }] }
表1中,tenant_name、region、availability_zone、flavor、networks、floating_ip均为创建私有镜像时使用的云服务器的属性信息。
参数 |
描述 |
是否为必选 |
---|---|---|
type |
保持默认值“openstack”。 |
是 |
identity_endpoint |
身份鉴别节点地址,格式为:https://IAM的Endpoint/v3 其中,IAM的Endpoint可参考地区和终端节点获取。 |
是 |
tenant_name |
项目名称。获取方式:
|
是 |
domain_name |
账号名。获取方式:
|
是 |
username |
IAM用户名。获取方式:
说明:
如果您使用账号登录华为云控制台,IAM用户名和账号名为一个值。 |
是 |
password |
管理控制台的登录密码。 |
是 |
ssh_username |
待创建私有镜像的ssh登录用户名。 |
是 |
region |
区域名称。参考地区和终端节点获取。 |
是 |
image_name |
待创建私有镜像的名称。 |
是 |
instance_name |
创建私有镜像时生成的临时实例的名称。此项如果不填写,系统会随机分配。 |
否 |
source_image |
源镜像ID,可以从镜像服务控制台公共镜像列表获取。当然,如果您已有Ubuntu 16.04 Server 64bit系统的私有镜像,想通过Packer进行改造,此处也可以填写该私有镜像的ID。 |
是 |
availability_zone |
可用区。参考地区和终端节点获取。 |
是 |
flavor |
云服务器的规格。 |
是 |
use_blockstorage_volume |
使用系统盘导出镜像,而不是整台服务器创建镜像。 |
是,且值必须设置为true。 |
networks |
VPC子网网络ID。 |
是 |
floating_ip |
弹性公网IP的ID。 |
如果在Packer创建的镜像实例中需要使用外网,那么该配置项必选。 |
provisioners |
创建私有镜像时使用的Packer配置器类型。详情请参见Packer配置器。 |
是 |
post-processors |
创建私有镜像时使用的Packer后处理器类型。 |
否 |
运行结果如下所示:
openstack output will be in this color. ==> openstack: Loading flavor: s3.small.1 openstack: Verified flavor. ID: s3.small.1 ==> openstack: Creating temporary keypair: packer_5be8d358-2cc6-66a4-f1b5-31e8587c7bfa ... ==> openstack: Created temporary keypair: packer_5be8d358-2cc6-66a4-f1b5-31e8587c7bfa ==> openstack: Launching server... ==> openstack: Launching server... openstack: Server ID: fcf2014e-2f70-46c5-80d5-870ae0d1e659 ==> openstack: Waiting for server to become ready... openstack: Selected floating IP: '8f686f9a-3408-4fdd-be75-ea768065800c' (119.3.67.11) ==> openstack: Associating floating IP '8f686f9a-3408-4fdd-be75-ea768065800c' (119.3.67.11) with instance port... openstack: Added floating IP '8f686f9a-3408-4fdd-be75-ea768065800c' (119.3.67.11) to instance! ==> openstack: Using ssh communicator to connect: 119.3.67.11 ==> openstack: Waiting for SSH to become available... ==> openstack: Connected to SSH! ==> openstack: Provisioning with shell script: /tmp/packer-shell133419321 openstack: + apt-get update -y openstack: Hit:1 http://archive.ubuntu.com/ubuntu xenial InRelease ...... openstack: Fetched 7,088 kB in 9s (778 kB/s) openstack: Reading package lists... ==> openstack: Stopping server: fcf2014e-2f70-46c5-80d5-870ae0d1e659 ... openstack: Waiting for server to stop: fcf2014e-2f70-46c5-80d5-870ae0d1e659 ... ==> openstack: Creating the image: CentOS-image-updating-powered-by-Packer openstack: Image: 9eccbb17-9aed-4beb-bf44-1e8c80448ba3 ==> openstack: Waiting for image CentOS-image-updating-powered-by-Packer (image id: 9eccbb17-9aed-4beb-bf44-1e8c80448ba3) to become ready... ==> openstack: Terminating the source server: fcf2014e-2f70-46c5-80d5-870ae0d1e659 ... ==> openstack: Deleting temporary keypair: packer_5be8d358-2cc6-66a4-f1b5-31e8587c7bfa ... ==> openstack: Running post-processor: manifest Build 'openstack' finished. ==> Builds finished. The artifacts of successful builds are: --> openstack: An image was created: 9eccbb17-9aed-4beb-bf44-1e8c80448ba3 --> openstack:
公司介绍 我们公司是全球法律服务整合平台,已有的4万多名律师遍布全国359个城市...
??提到慕尼黑,大家第一个想到总是啤酒节,其实慕尼黑的文化同样闻名世界。慕尼...
云虚拟主机 可以干什么?云 虚拟主机 可以是搭 建网站 的重要产品,可用来存放网...
注册了 域名 不备案可以吗?可以的。 注册域名 并不是一定要备案的,只有搭 建网...
客户简介 趣医网(quyiyuan.com)创立于2014年,为京颐集团重要成员企业之一,是...
客户简介 全民直播是一家涵盖游戏、娱乐、户外等多领域泛娱乐的直播平台。2015年...
案例背景 高校健康打卡项目发起于北京大学软件与微电子学院,是该学院张齐勋老师...
3月24日,腾讯发布2020年Q4及全年财报,其中金融科技及企业服务第四季收入385亿...
排查思路 无法通过远程桌面连接裸金属服务器时,我们推荐您按照以下思路排查问题...
API风格说明 当前ECS服务对外开放两类风格的API: ECS服务自定义规范的API(以下...