Docker是一种应用虚拟化技术,在免费的开源软件社区中大受欢迎。 在Web服务器及数据库服务器之间,Docker容器需要设置指定的应用程序,在一个相对独立的环境下运行Docker容器及其附属应用。 DevOps工程师和程序员非常喜欢使用Docker,因为它们可以在短短的几秒钟的时间内影响整个多容器环境。好像运行在内部专用硬盘上一样,容器有自己的网络意识和行为。
当不再需要容器时,它可以自动停止,并不会有太久的延时。 微软公司Enterprise Cloud Group架构主管兼技术研究员Jeffrey Snover和Azure首席技术官Mark Russinovich对免费、开源软件通用化以及……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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图像
如图2所示,在Azure创建容器主机后,点击“Connect”下载一个预先设置好的 Remote Desktop Protocol (RDP).rdp 文件。
图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管理平台会话窗口。首先,让我们来先验证下是否已经安全了容器功能,如图所示:
然后,我们要确定Docker服务确实存在并已经开始运行,如图所示:
两方面都做到的话那是非常不错的了。我们可以通过以下两种方式来管理Windows Server容器:
- 本地Docker指令
- 容器Windows PowerShell模块
对于在开源环境中接触过Docker的人来说,他们非常喜欢使用本地指令,因为它与在Linux环境中运行方式完全一致。然而,我建议大家使用PowerShell指令,因为我们现在已经对PowerShell语法非常熟悉,使用起来也更容易熟练。同样的,根据我多年经验,我发现PowerShell指令要比本地Docker指令可信性更强。
让我们快速浏览一下Containers指令,看看究竟有什么可用性:
创建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服务,确保已经将其关闭,避免产生额外费用
相关推荐
-
应用PowerShell进行SharePoint Online管理
在应用PowerShell在线管理SharePoint之前,管理员需要进行一系列准备工作,例如下载SharePoint Online Management Shell等。
-
谁来管理Windows容器?IT人员表示‘我说了算’
Windows用户在评估微软新兴容器产品时坚持表示,如果想把事情做对,那么就应该自己动手做。
-
PowerShell脚本示例及管理员参考指南
精明的Windows专业人士和管理员甚至也会做出比卷子袖子干事更加愚笨的事情,为了实现自动化任务,他们需要了解脚本语言以及所有PowerShell工具。
-
如何使用PowerShell管理Windows服务
管理员如何在本地或者远程计算机上操控服务,面对变几十台甚至几百台机器时,PowerShell就派上用场了。