前言
相信大家对于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 progress. This pagecontains many of our known issues.Be aware that there are some known Docker commands thatdon'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上,使用w get -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
|