初识Docker和Windows Server容器
概览
伴随着Windows Server 2016 Technical Preview 3 (TP3)版本的发布,微软首次提供了Windows平台下地原生容器。它集成了Docker对Windows Server的支持,这意味着你可以在
Windows环境下运行Docker容器。
首先需要明白的是,这不是第一次提供Windows下的容器。Odin(一家软件托管公司)已经通过自己的系统提供Windows容器超过十年了。考虑到他们没有获得微软提供的任何源代码,这不是一件简单的事。
其次,Windows容器(即使是Docker)仅仅被用来运行Windows应用。即使有共同的特性,所有现有基于Linux的容器不能在Windows中运行,对于那些起步者我认为这是一个通常的转换点。
还有两种Windows容器技术也是如此,一种基于Hyper-V,另一种可以直接运行在Window Server 2016(指的是Windows Server容器)。后者已经在这个发行版本中提供,所以我们将在这里测试它。
开始使用Windows 2016
整个安装过程非常简单,选择安装类型,选择一个驱动,直到完成安装。在我的体验中,我认为这是我所接触过安装最简单的Windows,所有设置和运行时间少于5分钟。当然,这是一个良好的开端。
这是我第一次使用Windows 2016,如果你熟悉Windows 10和Windows Server 2012,你会觉得(至少在视觉上)它是两个的混合体。事实上,自从2012 R2版本后已经有很多问题得到了修复。对于Server来说磁贴导航是(现在仍然是)非常糟糕的主意,尤其是在远程管理的时候。正如上面的截图所示,微软已经回归到了更加熟悉和直观地正常的启动菜单驱动系统。
安装容器
docker重启容器命令一旦你的Windows 2016 TP3基础版本安装完成后,你就可以安装Windows Server容器组件Docker和创建需要的容器镜像了。微软有一个引导来帮助你完成整个简单的过程。虽然只有三个步骤,由于最后一步需要下载容器的基础镜像(大于3GB),所以会耗费一些时间。
注意:
确保根据以下的引导来安装镜像。如果不这样,容器不会像预期一样工作。
让我们来看一下PowerShell脚本具体是做什么的。虽然从节省时间的角度来看单行安装不
错,你需要彻底地检查每一个步骤来看看它做了什么工作。尤其是当它是生产服务器的时候,你永远不应该盲目地安装你没有检查过或不理解的任何脚本。
第一步是建立一个虚拟交换机用于容器的联网。它通过使用DHCP来分配127.16.0.1/12范围的IP地址和NAT来使得外部可访问主机。接着,安装容器组件(Install-Feature -FeatureName Containers)然后安装一个“zdp.cab”,如果它是可用的。这相当含糊,这个文件并不存在于我的系统中。谷歌搜索也没有到相关的结果,最接近的是“Zero Day Package”,说明它只是简单的更新汇总文件。
然后安装器下载了“ContainerBaseImage.wim”并放到了C盘。这会耗费一些时间,因为这个基础镜像依然超过了3GB。PowerShell脚本中一个有趣的注释是微软为了性能禁用了进度条。这让我很好奇,我测试了下载(使用wget)并启用了进度条,这耗费了两个核心70%的性能,所以他们并没有开玩笑。一旦.wim文件下载完成就安装基本容器镜像(使用“Install-ContainerOsImage”命令)。
接下来Docker已经完成了下载并已经被安装了。然后再NSSM也就是“Non-Sucking Service Manager”的帮助下启动服务。最后这个基础镜像已经在Docker中被标记了,然后
就可以使用了。
Windows Server容器:新的开始
在Conteix,我们已经使用Windows Odin容器超过10年,所以容器的概念并不是新的。但是这里仍然有几个关键的区别,当然这也在随着产品的发展在不断变化。最主要的是基础镜像(.wim文件)必须与当前主机版本和补丁级别完全匹配。如果要为你的服务器打补丁,你需要重新下载并安装容器镜像。我希望这只是一个简单的问题并且微软能在发布正式版本的时候有办法自动更新补丁级别。
然后,并不是一切都一帆风顺。在预览版中可能会出现重新执行一些指令甚至删除重新创建容器的情况。所有的命令都是通过PowerShell执行,你需要保证PowerShell运行在管理员权限下。
让我们来开始创建基础容器:
New-Container -Name "WinContainerTest" -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch"
这并不会启动容器,所以现在我们来执行Start-Container命令:
Start-Container WinContainerTest
PowerShell最开始会显示一个进度条。在我的系统里,非常快只耗费了5分钟就启动了。可能是我现在缺乏PowerShell的使用经验,通过容器做一些操作稍显困难。尽管通过名字可以创建和启动它,通过PowerShell访问它之前你需要获得它的ID。Get-Container还是会返回一些输出(如下所示),或者一个对象。
(在我看来)没办法直接通过命令来获得ID。所以,我们需要先通过PowerShell对象保存数据然后将对象获得的ID输入PowerShell。命令如下:
$container = Get-Container "WinContainerTest"
Enter-PSSession -ContainerId $container.ContainerId -RunAsAdministrator
我们已经进入容器了。为了突出它,我简答地执行了 ipconfig 命令:
[c2d9f681-aa4]: PS C:\Windows\system32> ipconfig
Windows IP Configuration
Ethernet adapter vEthernet (Virtual Switch-C2D9F681-AA47-4652-B8EC-EED812EF8B25-0):
  Connection-specific DNS Suffix  . :
  Link-local IPv6 Address . . . . . : fe80::3de8:8a78:5788:8191
  IPv4 Address. . . . . . . . . . . : 172.16.0.2
  Subnet Mask . . . . . . . . . . . : 255.240.0.0
  Default Gateway . . . . . . . . . : 172.16.0.1
[c2d9f681-aa4]: PS C:\Windows\system32>
通过简单地测试,最终显示WIndows 2016 TP3 有一个基础的可使用的容器系统。
Docker…和Windows
是Docker新手吗?请确认你已经阅读了我的“What is Docker”这篇文章,它会帮助你加快速度。在nutshell中,Docker是一个应用级容器而在Linux世界中它在过去的18个月中获得了巨大的增长。一旦你开始使用Docker,你就会明白为什么会这样。应用部署变得易于管理和能够非常严格的控制。这也会使得Windows平台应用极大受益。
msdn.microsoft/virtualization/windowscontainers/quick_start/manage_docker
让我们来看一下我们有什么镜像:
C:\Users\Administrator> docker images
REPOSITORY          TAG                IMAGE ID            CREATED            VIRTUAL SIZE
windowsservercore  10.0.10514.0        0d53944cb84d        3 weeks ago        9.697 GB
windowsservercore  latest              0d53944cb84d        3 weeks ago        9.697 GB
PS C:\Users\Administrator>
可以看到一个基础的windowsservercore镜像,所以让我们启动Docker容器并和它快速交互一下(使用-it标志):
docker run -it --name dockerdemo
我们使用基础核心镜像,并执行PowerShell。虽然它好像没有做很多事,如果你执行ipconfig命令你就能看到容器的网络详情。以下是我屏幕的输出:
PS C:\Windows\system32> ipconfig
Windows IP Configuration
Ethernet adapter vEthernet (Virtual Switch-b68c41a9a1a36852173aca061b3e7d70d06c288724c9d04701110b9aa8033d22-0):
  Connection-specific DNS Suffix  . :
  Link-local IPv6 Address . . . . . : fe80::8817:363c:10d9:b94e
  IPv4 Address. . . . . . . . . . . : 172.16.0.2
  Subnet Mask . . . . . . . . . . . : 255.240.0.0
  Default Gateway . . . . . . . . . : 172.16.0.1
PS C:\Windows\system32>
在测试的时候我遇到了几个错误,比如不能通过名字和ID引用Docker容器。对于第一个版本,也将会出现像这样的状况,但并没有什么大的问题。为了解决问题,我简单地重启了Docker服务:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。