是否有人开始为Windows Docker引擎添加或考虑docker-machine驱动程序和供应商?
因此,任何人都可以使用docker-machine来保护和连接Windows Server 2016 TP4,就像我们用于Linux Docker Engine一样容易吗?
就像是:
docker-machine create -d generic --generic-winrm-user "administrator" ... dev
docker-machine create -d azure --azure-username "administrator" --azure-winrm-port 5985 ... dev
使用WinRM(HTTP / HTTPS)而不是SSH访问远程Windows Server并将TLS证书放入其中,并重新配置Windows Docker服务和其他内容。
我知道打包程序在Go中内置了用于SSH和WinRM的通信器以进行配置。
只是连接点...
ping @ahmetalpbalkan :微笑:
由于供应者模型当前的工作方式,实现这种功能可能并不太疯狂,尽管它需要在一些非常基本的假设(例如SSH的存在)上重新考虑或提出书面要求。
我有一种实现它的方式,那就是通过带有一些标志来明确表明它是Windows计算机。 例如--generic-winrm-userpass
。
我对Windows Server容器了解不多,但是Nathan表示,大部分工作将通过等待Microsoft完成(正在发生)或使用WinRM提供polyfill来在Windows上获得SSH协议(我不这样做)。知道它是如何工作的)。
我记得有关此事的讨论也在内部进行。 抄送: @jstarks,因为他在Windows容器团队中。
如果您认为可以原型制作某些东西,我会说去做。
@ enderb-ms哦,纳米图像,也很好。 而且OpenSSH也是一种选择。 同时,Packer和Vagrant等其他项目改进了Windows支持,以使用WinRM并摆脱了SSH,从而实现了更本地化的通信。
我首先想到的是让docker-machine连接到TP4服务器。 使用通用驱动程序。
还没有尝试过azure驱动程序,我想在Azure上选择TP4 VM + docker引擎模板,然后docker-machine知道预配Windows VM而不是Linux VM。 只需执行一些最少的步骤即可将运行docker-machine的本地计算机与该远程Docker Engine连接起来。
这些是针对已安装Docker的Linux VM运行通用驱动程序的步骤。 我为Windows添加了一些想法:
对于预安装了docker引擎的Azure /本地TP4:
步骤1.)它必须使用WinRM(例如,查看打包程序的Winrm通信器)而不是SSH。
步骤2.)可以检查一切是否正常运行,以及VM是否为TP4。 否则,如果无法安装所有内容(例如不重新启动),则中止操作。
然后,它必须执行步骤9.)... 14.)以停止docker,插入TLS证书并重新启动docker。 在该docker-machine创建与现有Azure VM /本地或本地Windows VM的连接并保护docker端口之后。
稍后可以在步骤2.)中进行增强,以允许“空” 2016服务器通过步骤6安装Docker。)
然后要有一个带有Nano映像的“ boot2docker.iso”,以便本地下载。
只是一些初步的想法;-)
对于上下文: http :
@dgageot您打算
@friism @ enderb-ms已经在进行中
@dgageot太好了! 有没有可以得到更多详细信息的地方?
@dgageot我有一个更改,可以在Azure上启动Windows服务器实例并设置Docker引擎。 有回购协议,其中提供@ enderb-ms的工作? 我可以在这里提交我的内容以进行审核,并且可以与@ enderb-ms正在执行的任何操作合并或合并。
我所做的工作的简要说明
cc @ahmetalpbalkan
@ppadala很棒
wt
谢谢@stefanfoulis @friism。 该工作位于https://github.com/containerx/machine中,但这还包括与该PR不相关的其他更改。
我正在创建一个新的分支,清理代码,并将很快提交拉取请求。
我提出了请求请求,任何评论和评论都表示赞赏。
仍然有一些需要工作的硬编码项目,我将在接下来的几天中修复。
公关参考: https :
@ppadala真的很好。 我认为@ enderb-ms和docker-machine维护人员目前正在试图弄清楚他们是否应该在Windows上使用WinRM或引导OpenSSH。 我让那些人来决定应该进行哪些工作。
至于天蓝色的驱动程序,恐怕我们不能更改azure
驱动程序。 我只是用Azure资源管理器堆栈重写了Azure驱动程序(这是一个巨大的突破)。 有关详细信息,请访问: https :
@ppadala同样重要的是,这可能不应该只是azure
驱动程序更改,因为几乎所有云提供商都将很快拥有WS2016映像,并且(如果需要)docker-machine可能需要添加这些特定于Windows的标志。
@ppadala真的很好。 我认为@ enderb-ms和docker-machine维护人员目前正在试图弄清楚他们是否应该在Windows上使用WinRM或引导OpenSSH。 我让那些人来决定应该进行哪些工作。
我实际上也考虑了SSH选项。 我只是不喜欢我尝试过的Windows OpenSSH服务器,无法从OS X连接到该服务器。也就是说,我还没有尝试所有可能的SSH服务器,你们知道的更好。 很高兴参加讨论,让我知道讨论在哪里进行。
就天蓝色驱动程序而言,恐怕我们无法更改天蓝色驱动程序。 我只是用Azure资源管理器堆栈重写了Azure驱动程序(这是一个巨大的突破)。 详细信息位于:#2742(评论),我们当前正在解决Azure SDK中的脆弱性问题,一旦完成,我将发送PR来发布新的Azure驱动程序。
不用担心,我所做的更改实际上不仅是对azure驱动程序的更改,而且还包括对其余docker-machine的更改,以为OS添加一个选项。 我将尝试您在#2742上发布的代码。 该代码是否已经支持在Azure上旋转Windows映像?
@ppadala同样重要的是,这可能不应该只是一个天蓝色的驱动程序更改,因为几乎所有云提供商都将很快拥有WS2016映像,并且(如果需要)docker-machine可能需要添加这些特定于Windows的标志。
如上文所述,我的更改既包含azure驱动程序,也包含其余docker-machine更改。 我们如何从这里开始? 我可以等待您的资源管理器更改被提交,然后我们可以确定向docker-machine添加Windows特定的标志。
@ahmetalpbalkan我检查了您在#2742中发布的代码。 据我了解,它正在使驱动程序使用ARM API,并且不支持Windows映像。 这是我的建议
我已经使用当前的驱动程序完成了2和3,并且可以基于您的基于ARM的驱动程序进行类似的更改。 让我知道你的想法。
@ppadala听起来不错。 如果您尝试将代码重新置于我的分支的顶部,则可以不受阻碍地开始做一些工作。 从功能上讲,新驱动程序已经准备就绪,但是我们仍在继续解决azure-sdk中的一些问题,这些问题可能仍需要一些时间(例如几周),因此我将最终结果作为通知发送给我们。请求。
@ppadala这太棒了! 谢谢你这样做。 不幸的是,我没有得到任何开发人员时间,因此我们还没有开始研究我们的想法。 但这可能有助于我吸引更多人加入。
我们希望使用SSH来允许其他平台(Linux和OS X)的开发人员能够在其本地计算机或云中的VM中部署Windows容器主机的原因之一。 我们已经开始讨论可能在某些Azure映像中包括OpenSSH,这样就无需额外的步骤来添加该功能。 您能告诉我更多有关OpenSSH的问题吗?
标记@dgageot也对WinRM有一些想法。
再次,这很棒,感谢您执行此@ppadala
@ppadala这太棒了! 谢谢你这样做。 不幸的是,我没有得到任何开发人员时间,因此我们还没有开始研究我们的想法。 但这可能有助于我吸引更多人加入。
我们希望使用SSH来允许其他平台(Linux和OS X)的开发人员能够在其本地计算机或云中的VM中部署Windows容器主机的原因之一。 我们已经开始讨论可能在某些Azure映像中包括OpenSSH,这样就无需额外的步骤来添加该功能。 您能告诉我更多有关OpenSSH的问题吗?
我将https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH设置为SSH服务器。 当我从Mac运行ssh <server> <cmd>时,尽管与服务器的普通交互式ssh可以工作,但它似乎不起作用。
如果您在Azure映像中包含SSH服务器,那肯定更干净。 docker-machine驱动程序接口似乎已经假设可以使用SSH访问。
@ppadala实际上,我刚刚发现有一些库允许在Linux和Mac OS X中进行Winrm通信,这将使现在的一切变得更加简单。 您正在使用该库进行Winrm通信,对吗? 您知道这是否适用于Linux和Mac OS X吗?
@ppadala实际上,我刚刚发现有一些库允许在Linux和Mac OS X中进行Winrm通信,这将使现在的一切变得更加简单。 您正在使用该库进行Winrm通信,对吗? 您知道这是否适用于Linux和Mac OS X吗?
是的,我正在使用打包程序库。 它在Mac OS X和Linux上均可使用。
@ppadala的ssh vs
@ppadala似乎您可以使用EnableWinRMHttp
在azure上配置时自动启用winrm 。 此处的详细信息: https :
@ enderb-ms @ taylorb-microsoft应该使用什么起始WS2016映像?
@ppadala似乎可以通过EnableWinRMHttp在azure上配置时自动启用https :
我已经在这样做了,这将打开Azure中的端口。 该映像还需要启用WinRM并正确设置Windows防火墙规则。 如果我不正确地理解这一点,也许Microsoft的人可以在这里鸣叫。
关于WinRM与OpenSSH的问题。
我认为两者最终都应该是选项... Windows的OpenSSH工作正在进行中(https://github.com/PowerShell/Win32-OpenSSH),但尚未完全完成(例如,它尚未在Nano Server上运行) )。 因此,我认为WinRM现在是一个不错的选择,然后我们可以在OpenSSH可以与Linux体验同等时在OpenSSH上分层。
嗨@ppadala ,我的一些同事对您计划对Azure驱动程序进行更新有一些问题:
另外,我并不是说要进取,但我很好奇,您知道PR何时会提高吗? 再次感谢您!
关于@friism的问题,如果它可以用于
- 您是否打算使用Nano Server进行测试? 驱动程序如何选择要选择的操作系统?
是。 驱动程序简单地旋转作为选项提供的任何Windows服务器映像,类似于使用--azure-image选项选择linux映像的方式。 那说纳米服务器需要测试。
- 使用您将要进行的更改,此方案是否可行? “用户将docker-machine create功能与Azure驱动程序配合使用以预配Windows容器主机VM,然后使用docker-machine env从其客户端的VM开始管理其容器”
是。 这是主要的用例。 客户端功能保持不变,因为我们要做的只是旋转Windows服务器Docker主机并设置端口。 如果Windows Docker引擎支持此功能(它确实支持),则可以使用。
- 对于Windows,“ docker-machine create”命令会是什么样?
额外的选项是--azure-os“ windows”,--azure-winrm-username“用户名”,--azure-winrm-password“密码”,类似于上面的@StefanScherer所建议的方式。
关于时间轴,我已经使用新的Azure驱动程序(https://github.com/docker/machine/pull/3159)重新调整了大部分更改,但是@ahmetalpbalkan ,我和其他一些人发现了身份验证问题(https: //github.com/docker/machine/issues/3201)和@ahmetalpbalkan发表了有关返回旧版驱动程序的评论(https://github.com/docker/machine/issues/3201#issuecomment-199409527)。 我们需要首先解决该讨论,以进一步进行讨论。 如果我们回到旧驱动程序,对我来说合并起来会更容易。
您正在参加Build吗? 亲自进行同步会很棒。
@ppadala我会在那里! Docker还将于30日12点在Yerba Buena的Delarosa举办午餐。 ping @ ah3rz了解详细信息
@ppadala我不会在Build上工作,但是我的经理@ taylorb-microsoft会在这里,所以您可以与他同步:-)
@ppadala您提到您不受阻碍,请告知我们有什么可以帮助的。
更新。 我已将大部分更改重新调整为基础,因此能够启动Windows服务器。 清理代码以在几天后提交请求。
但是,我们需要确定要用作目标VM映像的Windows服务器映像。 当前的官方Windows Server Core映像仅启用了RDP。 我需要在映像中启用WinRM。 请注意,这与很少有人建议的通过Azure(https://msdn.microsoft.com/zh-cn/library/azure/dn495299.aspx)启用WinRM无关。 这样只会在Azure中打开WinRM端口。 正在运行的映像实例(后来通过sysprep捕获到新映像中)应该运行以下命令。
PS C:\> winrm set winrm/config/service/auth @{Basic=”true”}
PS C:\> winrm set winrm/config/service @{Allowunencrypted=”true”}
PS C:\> New-NetFirewallRule -Protocol TCP -LocalPort 5985 -Direction Inbound -Action Allow -DisplayName winrm
PS C:\> winrm quickconfig
另一个难题是,Docker引擎的安装时间比Linux端的安装时间更长。 VM也必须重新启动。 我正在使用以下命令进行Docker引擎安装。
PS C:\> wget -uri https://aka.ms/tp4/Install-ContainerHost -OutFile C:\Install-ContainerHost.ps1
PS C:\> powershell.exe -NoProfile C:\Install-ContainerHost.ps1 -HyperV
Reboot
PS C:\> Install-ContainerImage -Name WindowsServerCore -Version 10.0.10586.0
PS C:\> wget https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/live/windows-server-container-tools/Update-ContainerHost/Update-ContainerHost.ps1 -OutFile Update-ContainerHost.ps1
PS C:\> ./Update-ContainerHost.ps1
有关@ enderb-ms和@ahmetalpbalkan的问题:Microsoft
当前,我创建了一个自定义映像,该映像同时安装和配置了WinRM和docker-engine。
@ppadala是任何公共分支吗? 用启动虚拟机的方式,您不能运行像这里这样的初始化脚本吗? https://github.com/Azure/azure-quickstart-templates/blob/875d139c16c9c023dce519e6dd48c707e3473346/201-vm-winrm-windows/azuredeploy.json#L183
@ppadala是任何公共分支吗? 用启动虚拟机的方式,您不能运行像这里这样的初始化脚本吗? https://github.com/Azure/azure-quickstart-templates/blob/875d139c16c9c023dce519e6dd48c707e3473346/201-vm-winrm-windows/azuredeploy.json#L183
该分支是公开的,但我还没有签到最新分支。 让我看看我是否可以这样做。
@ppadala是任何公共分支吗? 用启动虚拟机的方式,您不能运行像这里这样的初始化脚本吗? https://github.com/Azure/azure-quickstart-templates/blob/875d139c16c9c023dce519e6dd48c707e3473346/201-vm-winrm-windows/azuredeploy.json#L183
我尝试传递资源,但出现错误
Error creating machine: Error in driver during machine creation: compute/VirtualMachinesClient:CreateOrUpdate 400 Failure responding to request -- Original Error: azure: Service returned an error. Code="InvalidRequestContent" Message="The request content was invalid and could not be deserialized: 'Could not find member 'resources' on object of type 'ResourceDefinition'. Path 'resources', line 1, position 953.'." Status=400
这是尝试执行此操作的代码: https : https://github.com/ppadala/machine/commits/azure-windows以查看我对获得Windows支持的更改。
正确的方法是让Azure Go-SDK公开易于使用的功能来准备此部署模板。 通过查看json部署模板来翻译正确的内容很难传递。 @ahmetalpbalkan ,有什么想法吗?
本质上,有两条路径。
@ppadala我也很困惑。 我敢打赌,API试图说您不能在VM create调用上指定扩展名。 例如,当您部署具有扩展功能的ARM模板并观察部署过程时,ARM首先创建VM,然后在创建VM后单独创建扩展资源...
必须有一些方法可以在arm/compute
软件包中向VM添加扩展。 我建议在创建虚拟机后添加扩展名,这样可以解除对您的阻止。
谢谢@ahmetalpbalkan。 创建虚拟机后,我添加了VirtualMachineExtension,它可以正常工作。 我必须花点时间才能找出设置WinRM HTTPS侦听器的正确方法,但是我已经准备好拉取请求#3329。 让我知道你的评论。
为了方便测试,我还将二进制文件上传到https://www.dropbox.com/sh/kpc46xtc8su2sj7/AABtxVIVbGo8KLy7tu6HnWwza?dl=0 。
用法:三个新参数已添加到Azure驱动程序
--azure-os "linux" OS for the Azure VM (Windows|Linux)
--azure-winrm-user "docker-user" Username for WinRM login [$AZURE_WINRM_USER]
--azure-winrm-password Password for WinRM login [$AZURE_WINRM_PASSWORD]
样例命令
docker-machine -D create -d azure --azure-subscription-id $(cat ~/azure/subid) --azure-os "windows" --azure-image MicrosoftWindowsServer:WindowsServer:2016-Technical-Preview-with-Containers:2016.0.20151118 --azure-winrm-password "mysecretpassword" vhost-win-test
@ppadala @ahmetalpbalkan我不知道您是否已将其合并,但是有关保护Windows守护程序的这篇文章可能也不错: https :
/ cc @PatrickLang @swernli
@ppadala谢谢,这真棒。 我刚刚尝试使用示例命令在Azure中创建TP4计算机。 是的,它可以立即使用您的预构建二进制文件。 (好的,您必须输入更复杂的密码才能符合Windows密码复杂性要求)
具有如此简单的docker-machine命令的安全Docker引擎。 这是一个巨大的突破!
$ ./docker-machine-Darwin-x86_64 -D create -d azure --azure-subscription-id $(pass azure) --azure-os "windows" --azure-image MicrosoftWindowsServer:WindowsServer:2016-Technical-Preview-with-Containers:2016.0.20151118 --azure-winrm-password $(pass azure-winrm-password) vhost-win-test
$ eval $(./docker-machine-Darwin-x86_64 env vhost-win-test)
$ docker version
Client:
Version: 1.10.1
API version: 1.22
Go version: go1.5.3
Git commit: 9e83765
Built: Fri Feb 12 22:11:40 UTC 2016
OS/Arch: darwin/amd64
Server:
Version: 1.10.0-dev
API version: 1.22
Go version: go1.5.1
Git commit: 59a341e
Built: Fri Nov 13 17:23:07 UTC 2015
OS/Arch: windows/amd64
@ppadala,什么是更奇妙的是, docker-machine rm -f vhost-win-test
清理一切-我奋斗了这么多次清理虚拟机的所有部件与“部署到蔚蓝”创建,始终无缘按钮“从蔚蓝取消部署” 😄
@ppadala @ahmetalpbalkan我不知道您是否已将其合并,但是有关保护Windows守护程序的这篇文章可能也不错: https :
感谢您的链接@friism。 是的,与Linux类似,docker-engine已通过TLS保护。 docker-machine create工作流程会生成凭据(证书,密钥和ca),我使用WinRM将其上传到Windows Server。
@ppadala谢谢,这真棒。 我刚刚尝试使用示例命令在Azure中创建TP4计算机。 是的,它可以立即使用您的预构建二进制文件。 (好的,您必须输入更复杂的密码才能符合Windows密码复杂性要求)
感谢您尝试@StefanScherer。 纯文本密码是我在这里唯一不喜欢的部分(我喜欢您的pass方法)。 我们稍后可以切换到基于证书的身份验证。 不幸的是,打包程序库还不支持。
@ppadala而且,更奇妙的是,一个docker-machine rm -f vhost-win-test清理了所有内容-我很成天青”创建的VM的所有部分,却总是错过了“从天蓝色取消部署”按钮😄
感谢@ahmetalpbalkan转移到Azure ARM并编写了清晰的“清理”。
@ppadala,这真是太神奇了。 做得好! 我想现在的问题是如何将其短期内合并到azure驱动程序中,并在长期内合并到其他驱动程序(例如google / aws)中。
@ahmetalpbalkan拉取请求#3329已与master同步,并与azure驱动程序合并,如果您可以查看并提供评论,将非常
当前,只有Azure具有Windows Server 2016 VM,但是编写代码的方式很容易支持GCP,AWS,vSphere等。
- @ppadala
这是否意味着支持本地虚拟机提供商已迫在眉睫?
@ppadala @srounce我想说有人应该看看AWS / GCE / others API的WinRM和启动脚本执行功能,以了解该功能是否可以通过最少的更改移植到其他驱动程序。
@ppadala @ahmetalpbalkan能否将machine'azure '驱动程序与AzureStack一起使用?
@nilleb,恐怕还没有。 如果需要,请另开一期。
我刚刚下载了具有1.12 RC2且具有0.8.0-rc1的Windows的docker,但是当我尝试“ azure-os”“ windows”选项时,它似乎不起作用。 请让我知道我可以在哪里获得可以在Azure上创建TP5 Windows 2016 docker主机的docker-machine版本。
谢谢,
@SharadGumaste当您说“它不起作用”时,出现什么错误? 您是否尝试使用--azure-image
指定图像?
我刚刚下载了具有1.12 RC2且具有0.8.0-rc1的Windows的docker,但是当我尝试“ azure-os”“ windows”选项时,它似乎不起作用。 请让我知道我可以在哪里获得可以在Azure上创建TP5 Windows 2016 docker主机的docker-machine版本。
@SharadGumaste我猜您正在尝试发行的版本。 支持Windows的补丁(azure-os Windows选项)尚未合并。
Pradeep,是的,我从Docker软件进行了更新。 哪个最好
获取工作二进制文件的方法? 我非常接近进行演示的目的
我们的客户,但我无法创建准系统Windows服务器并安装
从头开始与docker host相关的东西并将该机器添加到
docker-machine以及从Visual Studio构建和部署。
我被TLS证书困住了...
预先感谢您的协助。
2016年6月23日,星期四,Pradeep Padala [email protected]写道:
我刚刚下载了具有1.12 RC2的Windows的docker
有0.8.0-rc1,但是当我尝试“ azure-os”“ windows”选项时,它确实
似乎不起作用。 请让我知道在哪里可以买到docker-machine
可以在Azure上创建TP5 Windows 2016 Docker主机的版本。@SharadGumaste https://github.com/SharadGumaste我猜你是
尝试发布的版本。 支持Windows(azure-os)的补丁
Windows选项)尚未合并。-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/docker/machine/issues/2907#issuecomment -228218888,
或使线程静音
https://github.com/notifications/unsubscribe/AH3YqqQLlXWUnSdw4i2TzsqXa4gHmTVYks5qOxt1gaJpZM4HKwbT
。
"A common mistake people make when trying to design something
完全傻瓜就是低估了完全傻瓜的匠心。”
– Douglas Adams, author (1952 – 2001)
@SharadGumaste您可以发送邮件到[email protected]吗? 我为Windows的docker-machine有一个单独的存储库,我可以向您发送有关设置的说明。
是否有任何有关在本地VirtualBox中旋转Windows Docker主机的新闻?
是否有人拥有能够在Azure上启动Windows VM的原型?
@djanosik我正在尝试使进入了https://github.com/davidarcher/machine/tree/azure_winrm中。
我按照@ jen20的说明使用SSH构建Windows AMI。 它可以与Docker Machine一起使用,直到调配为止,因为没有/etc/os-release
文件,导致配置失败。 现在Windows上的SSH已可用(需要一些努力),我们是否可以为Windows获得基于SSH的Docker Machine设置程序?
最有用的评论
我按照@ jen20的说明使用SSH构建Windows AMI。 它可以与Docker Machine一起使用,直到调配为止,因为没有
/etc/os-release
文件,导致配置失败。 现在Windows上的SSH已可用(需要一些努力),我们是否可以为Windows获得基于SSH的Docker Machine设置程序?