两种方式将Windows容器部署到微软Azure中

日期: 2016-04-05 作者:Tim Warner翻译:邹雅玲 来源:TechTarget中国 英文

Docker是一种应用虚拟化技术,在免费的开源软件社区中大受欢迎。 在Web服务器及数据库服务器之间,Docker容器需要设置指定的应用程序,在一个相对独立的环境下运行Docker容器及其附属应用。 DevOps工程师和程序员非常喜欢使用Docker,因为它们可以在短短的几秒钟的时间内影响整个多容器环境。好像运行在内部专用硬盘上一样,容器有自己的网络意识和行为。

当不再需要容器时,它可以自动停止,并不会有太久的延时。 微软公司Enterprise Cloud Group架构主管兼技术研究员Jeffrey Snover和Azure首席技术官Mark Russinovich对免费、开源软件通用化以及……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

Docker是一种应用虚拟化技术,在免费的开源软件社区中大受欢迎。

在Web服务器及数据库服务器之间,Docker容器需要设置指定的应用程序,在一个相对独立的环境下运行Docker容器及其附属应用。

DevOps工程师和程序员非常喜欢使用Docker,因为它们可以在短短的几秒钟的时间内影响整个多容器环境。好像运行在内部专用硬盘上一样,容器有自己的网络意识和行为。当不再需要容器时,它可以自动停止,并不会有太久的延时。

微软公司Enterprise Cloud Group架构主管兼技术研究员Jeffrey Snover和Azure首席技术官Mark Russinovich对免费、开源软件通用化以及Docker容器特殊化非常感兴趣。

Windows Server 2016 Technical Preview 4(简称TP4)中,Docker运行时间与Windows Server操作系统(简称OS)集成。Windows和Linux核心程序具有根本性的不同,因为我们不能在Windows容器主机上运行Linux容器。相反地,微软本身就已经提供了Windows Server容器。本文将会介绍在Windows Server 2016 TP4环境中如何从Azure虚拟机(简称VM)上部署Windows容器。

创建容器承载VM

毫不奇怪,我们将承载Docker运行环境及关联容器的服务器或者VM称为容器主机。尽管我们可以通过下载TP4 ISO、遵循一些相当繁琐的安装说明来设置内部容器主机,但是我认为,通过Azure公用云技术可以更容易地实现以上操作。

如果你还没有微软的Azure账户,那么先注册一个免费试用版。你将会获得200美元的服务额度,可以在一个月内免费访问Azure。

登陆 Azure 门户网站,利用配有Containers Tech Preview 4图像的Windows Server 2016 Core技术创建VM,如图1所示。

图1. 微软在AzureCloud. ALT中加入启用容器的Windows Server 2016图像

图1. 微软在AzureCloud. ALT中加入启用容器的Windows Server 2016图像

如图2所示,在Azure创建容器主机后,点击“Connect”下载一个预先设置好的 Remote Desktop Protocol (RDP).rdp 文件。

图2. 使用Remote Desktop Protocol连接到Azure中的容器主机VM

图2. 使用Remote Desktop Protocol连接到Azure中的容器主机VM

关于Azure的VM,我们还应该注意以下几点:

  • VM运行在Windows Server 2016 TP4的Server Core模式中,这就意味着不存在GUI。
  • 由于Docker运行环境所限,因此Windows容器是属于预安装类型。
  • 图像包含了Server Core配置中预先设置的运行Windows Server 2016 TP4的Docker容器

轻松获取命令

接下来,打开RDP连接,连接到容器主机VM上,你可以在cmd.exe提示下找到自己所在的位置,键入Powershell,进入PowerShell管理平台会话窗口。首先,让我们来先验证下是否已经安全了容器功能,如图所示:

两种方式将Windows容器部署到微软Azure中

然后,我们要确定Docker服务确实存在并已经开始运行,如图所示:

两种方式将Windows容器部署到微软Azure中

两方面都做到的话那是非常不错的了。我们可以通过以下两种方式来管理Windows Server容器:

  • 本地Docker指令
  • 容器Windows PowerShell模块

对于在开源环境中接触过Docker的人来说,他们非常喜欢使用本地指令,因为它与在Linux环境中运行方式完全一致。然而,我建议大家使用PowerShell指令,因为我们现在已经对PowerShell语法非常熟悉,使用起来也更容易熟练。同样的,根据我多年经验,我发现PowerShell指令要比本地Docker指令可信性更强。

让我们快速浏览一下Containers指令,看看究竟有什么可用性:


Get-Command -Module Containers | Select-Object -Property Name | Sort-Object -Property Name
Name
----
Add-ContainerNetworkAdapter
Add-ContainerSharedFolder
Connect-ContainerNetworkAdapter
Disconnect-ContainerNetworkAdapter
Export-ContainerImage
Get-Container
Get-ContainerHost
Get-ContainerImage
Get-ContainerMemory
Get-ContainerNetworkAdapter
Get-ContainerProcessor
Get-ContainerSharedFolder
Get-ContainerStorage
Import-ContainerImage
Install-ContainerOSImage
Move-ContainerImageRepository
New-Container
New-ContainerImage
Remove-Container
Remove-ContainerImage
Remove-ContainerNetworkAdapter
Remove-ContainerSharedFolder
Set-Container
Set-ContainerMemory
Set-ContainerNetworkAdapter
Set-ContainerProcessor
Set-ContainerSharedFolder
Set-ContainerStorage
Start-Container
Stop-Container
Test-ContainerImage
Uninstall-ContainerOSImage

创建Windows Server容器

在Docker术语中,容器代表一种容器图像实例。依次地,我们可以将容器图像看作为虚拟化OS和应用程序的一种蓝图。

我们可以通过Get-ContainerImage浏览VM的预设容器图像;

Get-ContainerImage
Name                Publisher      Version          IsOSImage
----              ---------         -------         ---------
WindowsServerCore   CN=Microsoft    10.0.10586.0    True

正如你看到的那样,目前我们有一种独立的Windows Server OS图像,称之为WindowsServerCore。我们将会使用 New-Container来创建一种核心容器,并设置这种图像为模板:

New-Container -Name 'core1' -ContainerImageName 'WindowsServerCore' -SwitchName 'Virtual Switch' -RuntimeType Default
Name     State     Uptime       ParentImageName
----     -----     ------       ---------------
core1    Off       00:00:00     WindowsServerCore

我想详细地讨论下之前代码的两种不同的参数。首先,-SwitchName参数会将容器绑定到容器主机的Hyper-V虚拟交换机上。

虚拟交换机非常重要,因为它可以使容器、主机以及其他方面实现交换、互通。我们可以进行以下尝试:

$switch = Get-VMSwitch -Name 'Virtual Switch'
$switch.NATSubnetAddress
172.16.0.0/12

我们可以从更深层次的角度看到,虚拟交换机在172.16.0.0/12地址范围内可以使用 Network Address Translation技术。这样,我们就可以期待容器可以拥有一个172.16.0.0/12 IPv4地址了。

其次,New-Container 命令的-RuntimeType参数指定容器的隔离级别。在这种我们可以有以下两种选择:

  • 默认类型:这就是“普通的”Windows Server容器隔离,其前提是,假设容器与主机之间存在一种高度的信任关系。
  • Hyper-V类型:这需要一种相对独立的容器环境,适用于完全独立、安全需求高的容器。

注意,微软的Azure并不支持Hyper-V容器。然而,当本地服务器运行Windows Server 2016 TP4时,你便可以部署这种类型的容器。我曾将遇到过更复杂的问题,但是这也在我的意料之中,因为此时Windows Server 2016和Docker集成还处在未完成的状态,十分不稳定。

在Windows容器中工作

Windows Server 2016在默认状态下是不会启动新容器的。我通过以下手动方式来调用Start-Container:

Start-Container -Name 'core1'

正如你所期待的,采用与Get-ContainerImage查看容器图像一样的方法,我们通过 Get-Container查看容器:

Get-Container
Name    State      Uptime              ParentImageName
----    -----      ------              ---------------
core1   Running    00:00:10.4520000    WindowsServerCore

通过PowerShell远程命令,我们可以与容器进行互动。首先,让我们通过Enter-PSSession进入到容器中:

Enter-PSSession -ContainerName 'core1' -RunAsAdministrator
[core1]: PS C:Windowssystem32>

现在,我们所发出的任何一条指令都会进入到core1中,而不是容器主机中。例如,我们一起检查下容器的IPv4地址:

[core1]: PS C:Windowssystem32> Get-NetIPAddress | Select-Object -Property IPv4Address
IPv4Address
-----------
172.16.0.2

正如我们所疑虑的那样,容器的IP地址是通过虚拟交换NAT'ed到主机上的。键入“Exit”,从容器中退出,返回到主机中。

通过使用Invoke-Command,我们将指令发送到容器中:

Invoke-Command -ContainerName 'core1' -ScriptBlock { Get-Service -Name Server }

Status     Name          DisplayName      PSComputerName
------     ----          -----------      --------------
Stopped   LanmanServer   Server           core1

如果你曾经使用过Invoke-Command,那么你很有可能会习惯通过-ComputerName参数来指定目标计算机。在Windows Server 2016中,新的-ContainerName参数可以帮助我们锁定目标容器。

清理环境

通过停止容器来完成本次测试:

Stop-Container -Name 'core1'

然后,我们删除这个容器:

Remove-Container -Name 'core1' -Force

关闭RDP会话窗口,返回到Azure门户网站。如图3所示,确保已经关闭VM,避免一些超额费用,或者更早的消耗完Azure信用额度。

图3. 如果你没有使用Azure服务,确保已经将其关闭,避免产生额外费用

图3. 如果你没有使用Azure服务,确保已经将其关闭,避免产生额外费用

作者

Tim Warner
Tim Warner

技术培训师

相关推荐