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

具体步骤如下:

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

  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为例进行介绍:

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

本节我们以CentOS6.x为例进行介绍,其他Linux操作系统的VHD制作可参考官方文档:制作和上载Linux虚拟机vhd

Hyper-V支持的操作系统英文文档:Hyper-V支持的CentOS和RedHat版本)
CentOS6.x 的vhd磁盘制作英文官方文档:基于CentOS的vhd虚拟机制作过程

  1. 安装CentOS 6.5 Linux虚拟机和应用软件

    您需要通过Hyper-V安装Linux虚拟机。注意在安装过程中,一定要选择后续应用软件所需要的各个组件,比如c/c++编译器或cmake或KDE图形界面等,虚拟机安装完成后需要进行系统设置使得Linux可以连接外网。
    Linux虚拟机安装完毕后,继续安装和配置应用软件。

  2. 网络和网卡配置

    a)卸载NetworkManager(这个软件包一般Linux没有装)

     # sudo rpm -e --nodeps NetworkManager

    b)编辑文件/etc/sysconfig/network如下:

     NETWORKING=yes
    OSTNAME=localhost.localdomain

    c)编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0:

     DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no

    d)修改udev防止以太网接口生成固定规则,在Azure平台上克隆虚拟机的时候,这些规则可能导致问题。

     # sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    # sudo rm -f /etc/udev/rules.d/70-persistent-net.rules

    e)确保系统在启动的时候网络服务正常:

     # sudo chkconfig network on
  3. 对于CentOS 6.3或早期版本,安装驱动Linux Integration Services (LIS),在CentOS 6.4+ 以上版本跳过此步骤
      下载如下软件包,并通过rpm进行安装:LIS download page

  4. 安装软件包python-pyasn1,后面的WALinuxAgent依赖于此

     # sudo yum install python-pyasn1
  5. 修改yum相关配置,为安装WaLinuxAgent做准备

    a)编辑yum配置文件/etc/yum.repos.d/CentOS-Base.repo

     [openlogic]
    name=CentOS-$releasever - openlogic packages for $basearch
    baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/
    enabled=1
    gpgcheck=0
    [base]
    name=CentOS-$releasever - Base
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    #released updates
    [updates]
    name=CentOS-$releasever - Updates
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    #additional packages that may be useful
    [extras]
    name=CentOS-$releasever - Extras
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    #additional packages that extend functionality of existing packages
    [centosplus]
    name=CentOS-$releasever - Plus
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    #contrib - packages by Centos Users
    [contrib]
    name=CentOS-$releasever - Contrib
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/contrib/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    b)配置/etc/yum.conf

     http_caching=packages

    另外,CentOS 6.3需要增加如下行:

     exclude=kernel*

    c)编辑/etc/yum/pluginconf.d/fastestmirror.conf, 使得yum模块"fastestmirror"无效

    在[main]一节, 设置

     set enabled=0

    d)清空现有的yum源数据

     # yum clean all

    e)对于CentOS 6.3, 更新内核:

     # sudo yum --disableexcludes=all install kernel

    f)在grub配置中为Azure修改内核启动参数,打开"/boot/grub/menu.lst",增加:

     console=ttyS0 earlyprintk=ttyS0 rootdelay=300 numa=off

    建议去掉以下参数:

     rhgb quiet crashkernel=auto
  6. 通过yum安装WaLinuxAgent

    a)安装Azure Linux Agent

     # sudo yum install WALinuxAgent

    b)打开配置文件/etc/waagent.conf如下修改:

     ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048`  ## NOTE:此项根据你的需要设置

    c)运行如下命令,你将不能再启动此虚拟机,直到它部署在Azure上运行。

     # sudo waagent -force -deprovision
    # export HISTSIZE=0
    # logout
  7. 在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
  3. 点击“虚拟机”-“映像”-“创建”,然后选择刚才上传的vhd创建映像。至此,您已经成功完成了映像的制作和上传。下一步,便可以发布映像到 Azure 镜像市场。

从本机构建Linux应用程序VHD映像的更多相关文章

  1. 从本机构建Windows应用程序虚拟机映像

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

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

    下图描述了总体的虚拟机的VHD映像生成以及发布到 Azure Azure 镜像市场的全过程: 具体步骤如下: 从Azure管理平台上Linux申请虚拟机, 安装和配置您要发布的应用软件产品,制作成映像 ...

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

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

  4. Django项目:堡垒机(Linux服务器主机管理系统)--02--02堡垒机设计后台交互程序

    #main.py #本文件写所有的连接交互动作程序 #————————————————02堡垒机设计后台交互程序 开始———————————————— from django.contrib.auth ...

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

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

  6. Jenkins之使用Pyinstaller构建Python应用程序

    目录 1. 极简概述 2. Jenkins配置 2.1 安装JDK 2.2 安装Jenkins 3. 安装Docker 4. 使用PyInstaller构建Python应用程序 4.1 Fork 一个 ...

  7. 从零开始构建Linux

    目的:深入了解以Linux内核为基础的系统是如何组成,运行,以构建一个最基础的,纯净的系统. LFS构建步骤宿主机准备- linux操作系统安装- 使用独立硬盘,创建分区- 配置用户和组- 下载所有需 ...

  8. 为 Linux 应用程序编写 DLL[转]

    自:http://www.ibm.com/developerworks/cn/linux/sdk/dll/index.html 在仅仅只会编写插件的时候为什么要编写整个应用程序? 插件和 DLL 通常 ...

  9. 构建LINUX下的入侵检测系统——LIDS 系统管理命令--vlock

    构建LINUX下的入侵检测系统——LIDS   系统管理命令--vlock http://blog.chinaunix.net/uid-306663-id-2440200.html LIDS官方网站: ...

随机推荐

  1. Intellij-怎么避免import.*包,以及import包顺序问题

    Intellij版本 IntelliJ IDEA 2018.1.2 (Ultimate Edition) Build #IU-181.4668.68, built on April 24, 2018 ...

  2. 使用SMTP发送邮件

    先定义一个邮件实体: public class EntityMail { /// <summary> /// 发件人 /// </summary> public string ...

  3. Android4.0 Launcher 源码分析1——Launcher整体结构

    1.Launcher整体结构 桌面程序其实并不包含桌面壁纸,桌面壁纸其实是由 WallpaperManagerService来提供,整个桌面其实是叠加在整个桌面壁纸上的另外一个层. 1.1 WorkS ...

  4. Flow中的Switch分析

    A switch statement can complete normally iff at least one of the following is true: (1)The switch bl ...

  5. 【原】SPARK_MEM和SPARK_WORKER_MEMORY的区别

    SPARK_MEM:设置每个Job(程序)在每个节点可用的内存量:(默认为512m) SPARK_WORKER_MEMORY:设置集群中每个节点分配的最大内存量:(默认为内存总量减去1G)

  6. 纯C++安卓开发 (ndk)系列之 ---- 常见问题

    常见问题1:run as Android Application运行时提示无法识别到模拟器 解决步骤如下: (1)首先查看安卓模拟器是否已经打开 (2)如果安卓模拟器已经打开,则操作步骤为:点击Ecl ...

  7. python如何帮我在投资中获取更高收益

    搞技术的大都比较纯粹,比较实在,除了工资之外基本就没有别的收入了(少部分人能接外包赚外块).或许是迫于生活的压力,或许是不甘于固定的工资,或许是出于技术人骨子里的好奇,亦或是这几年关于理财投资的大力宣 ...

  8. n-grama

    一.N-Gram的原理(这个词出现在句子中出现的概率) N-Gram是基于一个假设:第n个词出现与前n-1个词相关,而与其他任何词不相关.(这也是隐马尔可夫当中的假设.)整个句子出现的概率就等于各个词 ...

  9. springboot-13-junitTest

    junitTest, 提喜欢用的一个方法, 在测试代码时非常好用 1, 添加maven依赖 <!-- 加入spring-test依赖 --> <dependency> < ...

  10. SpringCloud源码解读

    http://blog.didispace.com/Spring-Cloud%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/