概览

伴随着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来说磁贴导航是(现在仍然是)非常糟糕的主意,尤其是在远程管理的时候。正如上面的截图所示,微软已经回归到了更加熟悉和直观地正常的启动菜单驱动系统。

安装容器

一旦你的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平台应用极大受益。

https://msdn.microsoft.com/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 windowsservercore powershell.exe

我们使用基础核心镜像,并执行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服务:

net stop docker

net start docker

这个操作每次都能解决所有的小问题,所以如果你要在早期的Windows平台下做很多Docker相关的开发请记住这个方便的方法。

让我们来看一下这里还有哪些镜像:

docker search microsoft

PS C:\Users\Administrator> docker search microsoft

NAME                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

microsoft/iis           Internet Information Services (IIS) instal...   1         [OK]       [OK]

microsoft/dnx-clr       .NET Execution Environment (DNX) installed...   1         [OK]       [OK]

microsoft/ruby          Ruby installed in a Windows Server Contain...   1                    [OK]

microsoft/rubyonrails   Ruby on Rails installed in a Windows Serve...   1                    [OK]

microsoft/python        Python installed in a Windows Server Conta...   1                    [OK]

microsoft/go            Go Programming Language installed in a Win...   1                    [OK]

microsoft/mongodb       MongoDB installed in a Windows Server Cont...   1                    [OK]

microsoft/redis         Redis installed in a Windows Server Contai...   1                    [OK]

microsoft/sqlite        SQLite installed in a Windows Server Conta...   1                    [OK]

PS C:\Users\Administrator>

非常棒!作为一名Python程序员,我热衷于快速:

docker pull microsoft/python

现在镜像下载下来,我们将会运行一个快速可交互的Python shell,它在推出时会销毁:

docker run -it --rm microsoft/python cmd

非常不幸,没有像预期一样运行。我甚至不得不指出“cmd”才能使得容器运行,到目前为止也没有找到让python运行的正确方式。显然这是他们正在努力地领域。

总结

对于微软来说这是一个早期的领域,所以我不能对产品太严苛。在容器成为可作为生产环境系统的道路上还有很长的路要走。同时,到目前为止显示有许多承诺。我本未预料到在今年容器出现在预览版所以我还是有点小惊喜。必须重申,这是一个技术预览版。会有许多bugs和缺陷,目前为止它还不是一个完整地系统。值得庆幸的是,微软有一个“Work In Progress”页面,它列出了当前所有的警告和已知问题。

如果他们做好了这个,容器在将所有东西安装进一台服务器和完全虚拟化之间提供了一个极大的中间地带。hypervised和容器化环境的混合模型将会成为可能,而且它很有可能在Linux领域大量使用。我坚信通过Docker提供清洁和重复使用的应用部署将会产生许多开发商。

减少大量底层服务器的占用空间需要强烈关注微软的动作,至少他们所展现的东西显示他们还需要努力。一些Linux为基础的操作系统(比如COS)很轻量只有454MB来运行Docker容器。然而Windows 2016的基础安装需要11GB之多,而如果要安装Docker和容器功能则超过了20GB。基础容器镜像压缩后超过了3GB,所以这方面依然还有许多工作来做。

总体而言,我们期待下一次的更新,我们将持续密切关注Windows Server容器技术的发展和成熟进度。


Tim Butler

有超过20年IT行业经验,我曾参与研发高并发系统。我目前的工作时为大公司和澳大利亚政府部门研发高可用高性能的web、email和VM平台。

Docker技术如何落地企业带来价值

希云是Docker领域的专家,致力于通过Docker技术提供更好的云计算产品和服务。希云品牌下的产品包括了

  • COS容器操作系统
  • cSphere容器管理平台
  • CDT基于容器的开发测试平台
  • CShow基于容器的项目演示平台
  • CHub企业版Registry

并提供相关的培训和咨询服务

  • 微镜像服务
  • Docker企业培训
  • 应用Docker化咨询
  • 软件SaaS化咨询
  • PaaS化咨询

微信关注cSphere-CN,查看精华文章。

转载声明

尊重知识,请必须全文转载,不得删改,包括本行。

初识Docker和Windows Server容器的更多相关文章

  1. 说一说windows原生docker及windows Server Container , Hyper Container 之间的关系(学习总结)

    前一段时间学习netcore的时候解除到了docker,感觉真是不错的技术.百度了不少教程.因为我用windows就下载安装了一下试试.但是没有安装成功,才发现 需要安装virtualbox虚拟机,与 ...

  2. Docker实战系列一:初识Docker for Windows

    windows下安装Docker官网教程Install Docker for Windows Docker配置官网教程Get started with Docker for Windows

  3. Docker 运行 SQL Server 容器映像

    随着.Net Core迭代,大家也都用上了Linux用上了Docker.跟.Net经常配套使用的SQL SERVER以前一直是windows only,但是从SQL Server 2017开始已经支持 ...

  4. Windows Server 2019 容器化探索-Docker安装

    Docker on Windows Server 2019 微软自Windows Server 2016开始支持Docker,今天我们将介绍在Windows Server 2019上安装并使用Dock ...

  5. Windows server 2016安装Docker EE

    Windows server 2016安装Docker EE 下载 windows server 2016 180天评估版本. 地址:https://www.microsoft.com/en-us/e ...

  6. 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

    原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...

  7. 微软发布 Windows Server 2016 预览版第三版,开发者要重点关注Nano Server

    微软已经发布 Windows Server 2016 和 System Center 2016 第三个技术预览版,已经提供下载.Windows Server 2016 技术预览版第三版也是首个包括了容 ...

  8. Windows Server 2019 预览版介绍

    在Windows server 2012.Windows server 2016还未完全普及的情况下,昨天Windows Server团队宣布Windows Server 2019将在2018年的下半 ...

  9. Windows Server 2016-Win Ser 2016新增功能

    本来想着整个系列都是与Active Directory相关的内容,上一章节我们应读者要求补充了Window Server 2016标准版与数据中心版的区别,鉴于读者的疑惑,从本章节开始补充三到五章与W ...

随机推荐

  1. MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)

    ----------------- [1] use master go sp_configure reconfigure with override go ----------------- [2] ...

  2. Python字典的基本组成以及用法

    #!/usr/bin/env python# -*- coding:utf-8 -*-"""老规矩以下方法环境2.7.x,请3.x以上版本的朋友记得格式print(输出内 ...

  3. Window10可用的转串口驱动CH340

    下载地址:http://pan.baidu.com/s/1cvCNtO

  4. 强大的DOM变化观察者MutationObserver

    在这之前 DOM3 提供了 Mutation events 事件 DOMAttrModified DOMAttributeNameChanged DOMCharacterDataModified DO ...

  5. Win10系统旗舰版ghost版系统镜像下载

    微软已经发布了Win10预览版10041快速版更新,但通过Windows更新的方式比较慢.现在微软官方已经发布Win10预览版10041的系统ISO镜像,还没更新这一版本的朋友可以使用该镜像进行更新. ...

  6. [WPF系列]基础学习(一) WPF是什么?

    引言 学习之前,我们首先大概了解下WPF诞生的背景以及它所能解决的问题或者新颖之处.WPF作为微软新一代的用户界面技术,   WPF简介 WPF的全称是WindowsPresentationFound ...

  7. COGS 265线段覆盖[线段树]

    265. 线段覆盖 ★★☆   输入文件:xdfg.in   输出文件:xdfg.out   简单对比时间限制:2 s   内存限制:20 MB [问题描述] 有一根长度为 L 的白色条状物.有两种操 ...

  8. Chrome 控制台console的用法(转)

    下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用. 目前控制台方法和属性有: ["$$", "$x", "dir" ...

  9. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 检查版本升级、检查登录超时

    当用户都在一个公司内,甚至一个办公室时,喉一下或者跑过去亲自更新一下程序,就可以了,问题就很简单也没多少复杂性,也不怎么考验技术能力.当面对全国10万以上客户端时,问题就来了. 1:有的用户打开系统一 ...

  10. void 0作用

    undefine 是可以被赋值的. 但是void 操作符 通过 计算 void 后面的变量名后还是会返回一个undefined ,这样就保证了你的undefined即使被定义了,采用void 表达式, ...