下图描述了总体的虚拟机映像的VHD生成,上传以及发布到 Azure 镜像市场的全过程:

具体步骤如下:

  1. 在本地计算机(Windows平台)上安装Hyper-V,并安装您所需要的虚拟机操作系统
  2. 在此操作系统上安装和配置您要发布的应用软件产品
  3. 在本地计算机上制作VHD为映像
  4. 将制作好的VHD通过PowerShell上传到Azure存储账号上,生成映像,并获取在Azure上的存储位置(url地址)
  5. 申请预发布环境,将第四步中Azure上的虚拟机映像部署到测试发布环境进行验证
  6. 正式发布,登录到Azure 镜像市场,并根据发布流程将已经测试完毕的VHD发布到 Azure 镜像市场
第一步:准备
  1. 检查操作系统版本兼容性

    如操作系统为Windows,请确认所安装的Windows系统版本是Azure所支持的。

  2. 本机安装Hyper-V

    确认Hyper-V在您的Windows系统中安装并可以使用。
    关于Hyper-V在各版本Windows上的安装和配置,请参考: 安装Hyper-V并创建虚拟机

  3. 本机安装了PowerShell命令行工具

    获取Azure的配置文件(过程中需要输入azure的账号密码),并保存到磁盘。

     Get-AzurePublishSettingsFile –Environment azurechinacloud

    导入账户认证信息,路径用引号(为上一步骤中的配置文件路径)。

     Import-AzurePublishSettingsFile <PathToFile>

第一步完成后,即可开始制作映像,制作VHD主要包括两种方式,第一种是通过本地Hyper-V虚拟机建立VHD,第二种是直接在Azure制作VHD。以下以本地建立VHD为例进行介绍:

第二步:从本机制作Windows应用程序VHD映像

本节我们以Windows Server12为例进行介绍,Windows操作系统的VHD制作可参考英文官方文档:Create and upload a Windows Server VHD to Azure

  1. 安装Application软件。登录虚拟机,安装应用软件,并设置开启启动服务。

  2. 尝试清除虚拟机系统并使其适用于重新配置,并关机。
    打开终端窗口,进入目录, %windir%\system32\sysprep,比如C:\Windows\System32\sysprep

     然后运行: sysprep.exe

    此时会显示“系统准备工具”对话框。在“系统清理操作”中,选择“进入系统全新体验(OOBE)”,并确保选中“通用”。在“关机选项”中选择“关机”。单击“确定”关机。

  3. 在Hyper-v中关闭Linux,Linux VHD文件已经制作好并可以上传到Azure。

第三步:将VHD上传至Azure

用PowerShell将VHD文件上传到Azure
 
假设上传的文件是myvhd.vhd,上传存储空间是mystorage,容器是mycontainer

  1. 在Azure管理平台上建立存储位置。
    假设我们的目标是将VHD文件放置到Azure上的存储空间mystorage中的容器mycontainer中,位置为myurl。
    进入Azure管理平台,建立存储空间mystorage并在其下面建立容器mycontainer,然后拷贝这个容器的url位置,注意容器的属性一定要设置为“公共blob”属性,只有“公共blob”属性中的VHD映像才能够被发布到 Azure 镜像市场。

  2. 将本地的VHD文件上传至Azure的指定位置。打开PowerShell,在PowerShell中输入如下指令。

     Add-AzureVhd [[-NumberOfUploaderThreads] [<Int32>]] -Destination <BlobStorageURL>/<YourImagesFolder>/<VHDName> -LocalFilePath <PathToVHDFile>

    例如:

     Add-AzureVhd -NumberOfUploaderThreads 5 -Destination https://mystorage.blob.core.chinacloudapi.cn/mycontainer/myvhd.vhd -LocalFilePath D:\Mydir\Hyper-V\myvhds\myvhd.vhd
  1. 生成虚拟机映像

    点击“虚拟机”-“映像”-“创建”,然后选择刚才上传的vhd创建映像。至此,您已经成功完成了映像的制作和上传。下一步,便可以发布映像到 Azure 镜像市场。

从本机构建Windows应用程序虚拟机映像的更多相关文章

  1. 从本机构建Linux应用程序VHD映像

    下图描述了总体的虚拟机映像的VHD生成,上传以及发布到 Azure 镜像市场的全过程: 具体步骤如下: 在本地计算机(Windows平台)上安装Hyper-V,并安装您所需要的虚拟机操作系统 在此操作 ...

  2. 从Azure上构建Windows应用程序映像

    从Azure上构建windows应用程序映像同构建Linux应用程序映像总体流程比较类似,可以参考上图Linux映像的制作发布等流程,具体细节又有所差别. 具体步骤如下: 从Azure管理平台上申请W ...

  3. 关键两步+6个要点,让Windows应用程序享有K8S的绝佳优势

    本文来自Rancher Labs 前  言 实际上,没有一个迁移路径能够适用于将所有传统应用程序迁移到云.这些应用程序通常在物理机.虚拟机或本地.虽然一般情况下是重新设计应用程序架构以适用云原生服务, ...

  4. 使用 Eclipse PhoneGap 构建 Android 应用程序入门

    Eclipse 是一种支持多种技术的开源集成开发环境 (IDE),但本文重点介绍 Java 支持,这也是 Android 应用程序的“母语”.Android 是 Google 发布的开源移动操作系统. ...

  5. 使用ASP.NET 构建 Web 应用程序快速入门-8小时的免费培训视频

    - Scott Hanselman的中文博客[转载] [原文发表地址] Building Web Apps with ASP.NET Jump Start - 8 Hours of FREE Trai ...

  6. 快速构建Windows 8风格应用3-打包发布应用

    原文:快速构建Windows 8风格应用3-打包发布应用 本篇博文主要介绍如何打包应用程序,成功后如何部署应用程序,最后介绍如何发布应用程序到应用商店中. 如何打包Windows 8风格应用程序呢? ...

  7. 快速构建Windows 8风格应用2-创建调试应用

    原文:快速构建Windows 8风格应用2-创建调试应用 本篇博文主要介绍的是创建应用时可以选择哪些模版,生成默认的Windows 8风格应用解决方案中含哪些文件,最后是如何调试Windows 8风格 ...

  8. Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)

    Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer   Advanced Installer :Free for 30 da ...

  9. Python flask构建微信小程序订餐系统

    第1章 <Python Flask构建微信小程序订餐系统>课程简介 本章内容会带领大家通览整体架构,功能模块,及学习建议.让大家在一个清晰的开发思路下,进行后续的学习.同时领着大家登陆ht ...

随机推荐

  1. Java的Signature签名转换成.Net

    Java: Signature sig = Signature.getInstance("SHA1withRSA"); sig.initSign(rsaPrivateKey); s ...

  2. 怎么将一张100KB以上大小的电子图片压缩成30KB以内

    不多说,直接上干货! 方法一: 怎么将一张100KB以上大小的电子照片压缩成30KB以内. 先将这张100KB以上大小的电子照片,新建一个word,放入.选中照片,右击,另存为,格式依然还是选择.jp ...

  3. 《垃圾回收的算法与实现》——保守式GC

    保守式GC 保守式GC指"不能识别指针和非指针的GC". 不明确的根,寄存器.调用栈.全局变量空间等属于GC root,这些GC均不能识别出是指针还是非指针. 指针的识别,在不明确 ...

  4. 移动端模拟hover

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <meta name=& ...

  5. java主线程结束和子线程结束之间的关系

    (一)Main线程是个非守护线程,不能设置成守护线程. 这是因为,main线程是由java虚拟机在启动的时候创建的.main方法开始执行的时候,主线程已经创建好并在运行了.对于运行中的线程,调用Thr ...

  6. php的304方式

    一般浏览器请求php是不会被缓存的,除非php直接显示的发送head 304 if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { $browserCache ...

  7. MySQL死锁检测和回滚

    最近碰到“TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACT ...

  8. python3.3 unicode(encode&decode)

    最近在用python写多语言的一个插件时,涉及到python3.x中的unicode和编码操作,本文就是针对编码问题研究的汇总,目前已开源至github.以下内容来自项目中的README. 1 ASC ...

  9. [android] 手机卫士黑名单功能(列表展示)

    先把要拦截的电话号码保存到数据库中,拦截模式用个字段区分,1 电话拦截,2 短信拦截,3全部拦截 新建Activity类CallSmsSafeActivity.java 新建布局文件activity_ ...

  10. hdu 1023 卡特兰数《 大数》java

    Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...