前言
相信大家对于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 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 p_w_picpaths:
7、 接着我们就可以在p_w_picpaths中看到我们刚刚创建的p_w_picpath:
8、 我们就可以使用docker run -it --name VMC-NGC01 -p 8001:80 nginx_windows cmd调用刚刚创建的p_w_picpaths去创建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 p_w_picpaths:
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