初窥Windows Server Container

前言

          相信大家对于Docker这项技术都有一定了解了,Container是一种轻量级的解决方案,非常适合将传统windows平台上的无状态服务迁移上去(相对于VM虚拟化更加能够提高整体资源利用率),加上微软的大部分技术架构都是可以整合的,而采用linux下的docker整合起来效果并不是特别好(比如我曾经尝试着用scom监控linux下Container,虽然成功了但是效果并不是很好),所以对于Windows平台的Docker我就更加期待了。今天我就把近一段时间一直零零散散做的一些小demo来做个汇总。 

(图为微软Container示意图)

在开始之前,先啰嗦几句:

由于目前Windows Container仍处于TP3阶段(技术预览),所以存在Bug是正常的,以下是官方的原话:

Remember, this is a preview there are bugs and we have a lot of work in progressThis page contains many of our known issues.Be aware that there are some known Docker commands that don’t work and some that only partially work

简单翻译下,其实就是一句话:“没有Bug才不正常呢”,所以千万别在生产环境试水Windows Container(至少等到发布)

实验部分

        今天这个实验的目录是通过Windows Container创建一个Nginx Container(至于为什么不创建IIS Container,后面有讲述),仅作实验参考。

 

1、  新建Windows Server Container:


2、  输入相关配置信息后创建完成,注意我们这里先映射出8001端口作为测试端口用:


3、  创建完成后,连接到Docker Host上,使用wget -uri ‘http://nginx.org/download/nginx-1.9.3.zip’ -OutFile “c:\nginx-1.9.3.zip“获取源码nginx部署包,然后创建Dockerfile,new-item -Type File c:\docker\nginx\dockerfile


4、  使用Expand-Archive -Path C:\nginx-1.9.3.zip -DestinationPath C:\docker\nginx\source –Force将源码解压到我们创建的目录上,待会儿dockerfile会调用到:


5、  使用notepad.exe c:\docker\nginx\dockerfile开始编写dockerfile内容:

FROM windowsservercore

LABEL Description=”nginx For Windows” Vendor=”nginx” Version=”1.9.3″

ADD source /nginx

6、  然后使用docker build -t nginx_windows C:\docker\nginx开始使用dockerfile创建nginx images:


7、  接着我们就可以在images中看到我们刚刚创建的image:


8、 我们就可以使用docker run -it –name VMC-NGC01 -p 8001:80 nginx_windows cmd调用刚刚创建的images去创建Container了,创建后如下:

9、  创建完成后是直接会进入Container里面的,在Container下运行cd c:\nginx\nginx-1.9.3进入nginx主目录,并使用start nginx启动服务:

10、 接着我们访问下站点页面,由于我们没有创建主页,所以访问为403(可以看到我并没有使用8001),然而我并没有找到好的方法可以修改到nginx.conf这个文件(请见Bug列表):

关于Windows Container IIS方面的尝试

1、  在不同平台的Docker上搜索IIS images:

a、Windows Container下搜索:


b、而在Linux Container下搜索IIS是这样的(虽然可能是因为Docker镜像库不同,不过就算修改了Linux上的镜像库,我认为应该不能正常在Linux Docker上进行运行):

2、 不知道什么原因,部署IIS Container1总是失败的:

a、使用Images方式创建(在端口映射正确的前提下,虽然成功创建,且Container中的iis服务正常,并且还手动创建了IIS站点并开启,仍然无法访问):

b、即使是使用微软GitHub上的DockerFile+PowerShell脚本创建,仍然是有问题的(采用了最新版本的TP3 Container及10月份的最新脚本):

关于TP版目前存在的疑似Bug

1、  映射端口无法生效,比如上述例子用了8001映射Container的80端口,然而8001端口并没有生效。


2、  映射端口并不会出现在docker ps中(可以用Get-NetNatStaticMapping):


3、  进入部分docker container中运行命令经常出现卡死情况(命令无法跳到下一行),比如打开某些文本文件时:


4、  目前windows container的Container名字还是大小写敏感的(这点跟linux版无异,不知道算不算bug)

结语

    最近听了台湾的MS专家冯立伟老师关于Windows Container的课后,更加印证了我之前的想法,将来的架构极有可能是

当然一切还得等Hyper-V Container出来,让我们一起期待。

由于最近博主正在为自家公司部署VMCloud Plus版本,所以更新周期变长了,但是,只要发现新奇玩意儿,博主都会不断去实践,即使进度很慢,即使困难很多,也会坚持完成,借此来感谢各位的关注:)



职场巅峰之路(已更新)

http://mp.weixin.qq.com/s?__biz=MzAxNzIxNDA2OQ==&mid=208028889&idx=1&sn=a6cff33094b29329fd6c364272df66cc&scene=18#rd

VMCloud-OPC

http://vmcloud.com.cn