Windows、Powershell和Docker上的Bash:为什么Microsoft要在服务器GUI上调用time

2020-01-02 15:06:51 来源: INeng财经

最后再看一眼——告别Windows服务器GUI。这是一个漫长的过程,但在其2016年构建开发者大会上,微软发布了两款工具,最终将服务器GUI的棺材钉上了钉子。也是时候了。

回顾一下微软服务器操作系统和工具的近期历史,我们会发现在最初的NT版本中所犯的错误是一个缓慢的恢复过程。第一个是PowerShell,它提供了一个真正的Windows命令行环境。与此密切相关的是Windows Server Core的开发,它放弃了GUI,转而支持命令行驱动的体验(同时仍然允许应用程序拥有自己的GUI)。Windows Server在以容器为中心的Nano服务器上更进一步,它根本没有GUI功能——甚至取消了命令行。

在Build中,微软宣布了对Windows上Unix Bash shell的支持,展示了开发人员使用安全shell工具直接与远程Unix服务器工作。虽然许多人关注Windows最终支持Unix和Linux软件(成功地尝试使用X在Windows PC上运行图形化Unix应用程序),但这里最重要的是Windows PC到Unix服务器的开发和操作工具链的连续性。

微软将在Windows Server 2016中添加虚拟容器、Nano服务器模式

微软证实,它将在Windows Server 2016中加入Nano服务器模式,以及新的Hyper-V容器化技术。

Bash运行在Windows上,您可以在Windows PC上使用与在远程服务器上相同的脚本和工具,从您的桌面安全访问服务器,而不需要留下命令行提示。不需要使用VNC或其他远程桌面工具来连接服务器,甚至不需要像PuTTY这样的SSH终端:只需要一个Windows命令行(该命令行在Windows 10中得到了极大的改进)。这意味着服务器构建可以不那么复杂,只需要必要的工具,最小化攻击面,保护应用程序和用户数据。

第二项低调得多的声明或许更为重要。任何在Windows Server 2016上使用容器的人都会注意到这两个管理选项有一个问题。使用Docker工具部署的容器不能使用PowerShell进行管理,反之亦然;两个工具甚至都看不见对方的容器。Build发布了一个新的PowerShell容器工具,它用直接与Docker一起工作的工具取代了原来的PowerShell容器工具——使Docker成为Windows Server 2016中容器的默认工具。

这个声明的不同之处在于,通过针对Docker REST api, PowerShell现在可以在任何平台上使用Docker容器。您将能够在Windows机器上安装PowerShell模块,并在Windows服务器和Linux上远程管理容器。这对微软来说是一个重要的转变,它推出了一种管理工具,可以对抗非Windows管理界面的api。

这种方法为PowerShell和PowerShell模块指出了一个有趣的方向。关于对Unix的PowerShell支持的讨论由来已久,对于某些Unix功能的远程管理,可以选择官方的和第三方的cmdlet。关于PowerShell的Unix端口有很多猜测,但是随着越来越多的Unix工具现在提供用于DevOps平台和SSH连接的api,将Microsoft的工具实际移植到Unix的需求正在消失。

现在看来,尤其是在Windows支持SSH的情况下,将来在PowerShell中对Unix的任何支持都将与新的Docker模块类似。使用您的Windows PC,您将能够针对特定的Unix命令针对PowerShell脚本,或者在PowerShell中包装脚本并通过SSH执行它们,或者通过REST api直接针对应用程序和服务。

通过Bash和PowerShell,微软现在在Windows中有两个广泛使用的远程操作平台。是时候与服务器图形用户界面说再见了。

服务器GUI的死亡并不意味着我们不会使用GUI来管理我们的服务器。只是这些gui将运行在我们的台式机、笔记本电脑和移动设备上。

我们可以在System Center(微软的管理工具)中看到未来的一些方面。使用它的虚拟机管理器来构建虚拟基础设施,您可以快速地通过单击来构建一组运行在虚拟网络上的虚拟服务器。

但是在“点并点击”管理界面之下,是一组非常不同的工具,它们采用那些gui驱动的管理服务,并将它们转换成PowerShell或Bash脚本。手工构建虚拟机的方法突然变成了编写自动化过程所需的脚本的方法。您只需要将结果脚本复制到编辑器中,然后就可以将显式的机器名转换为变量了,并且您已经获得了一个通用的cmdlet,可以一次又一次地使用它。

它是Azure中采用的一种更深入、更复杂的方式,使用Azure资源管理器模板来描述和部署整个基础设施。使用内建在Visual Studio中的工具,您可以快速构建一个模板,它不仅可以部署服务器和网络,还可以配置和连接Azure的平台特性,比如数据库和存储。

Docker CTO:为什么微软的Docker计划对Windows很重要

随着微软对Docker容器的大力支持,启动该项目的Docker CTO Solomon Hykes阐明了Windows迁移背后的信息。

阅读更多

那么,为什么微软现在要推动这种改变呢?也许最大的原因是Azure,以及运行一个行星级的云服务的问题。您不能在数百万个物理和虚拟服务器中的每一个都指向和单击GUI。相反,您必须自动化每个操作,构建能够大规模管理基础设施和应用程序的脚本和服务。使用PowerShell,我们可以构建这些脚本来针对远程Windows管理api工作,快速地在一组服务器上运行命令,通常是并行工作的。

这个场景引导了PowerShell的开发和方向,同时,它还迁移到一组Windows服务器选项,这些选项消除了对图形化shell的依赖,转而支持服务器内核中的命令行,现在在Nano服务器中根本没有UI选项。

远程管理api意味着您可以使用远程管理工具或web前端(如果您想使用服务器,可以使用批量操作的批脚本)。随着用于容器托管的unikernel服务器的出现,相同的模型也将出现在UNIX世界中。

对于一个没有ui的服务器的世界,有很多值得讨论的地方。这首先是大大减少了攻击面和维护负荷。服务器变得更小、更灵活、更容易配置。你可以建立一个服务器,优化为一个单一的任务;使用瘦服务器作为一系列隔离关键功能的容器的主机,保护应用程序和底层操作系统。使用脚本驱动的技术(如所需的状态配置以保持服务器配置的稳定)和足够的管理(确保仅在需要时才委派管理权限,然后仅针对特定任务)还有其他一些好处。

在客户端,Windows上的Bash和支持api的PowerShell的组合为Microsoft的开发人员和系统管理员用户提供了一套功能强大的工具,为无gui服务器的世界做好了准备。把这些放在一起,结果是一个非常有趣的未来。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。