老司机实战Windows Server Docker:2 docker化现有iis应用的正确姿势

本文探讨如何将基于IIS的应用正确运行在Windows Server Docker实例中,涉及Dockerfile的编写、系统日志查看、容器重启策略、网络路由及应用示例。通过示例展示了如何构建Dockerfile,设置启动脚本,以及处理环境变量和IIS日志。文章指出,正确部署IIS应用并不简单,需要解决多个问题,如环境变量传递、日志保存和网络访问等。
摘要由CSDN通过智能技术生成

前言

上一篇老司机实战Windows Server Docker:1 初体验之各种填坑介绍了安装docker服务过程中的一些小坑。这一篇,我们来填一些稍大一些的坑:如何docker化一个现有的iis应用。

问题分析

听说Windows支持原生docker了,大家一定都很兴奋。然而,大家想过没有,Windows Server Docker最适合什么场景呢?部署.NET Core应用?为什么不选择Linux下的docker?正常的决策者脑袋被门挤了才会花钱额外买Windows Server的license,用来部署.NET Core吧?所以,在本人看来,Windows Server Docker最大的价值,还是在于部署传统基于WindowsServerCore的应用。这样的应用一般有两大类,一类是基于iis的网站应用;另一类是Windows Service。本文主要关注基于iis的应用的docker部署。

那么,部署一个iis应用到docker,是不是只要起一个iis的docker容器实例,远程连接,并且,copy文件进去,能通过容器内的iis访问就行了?如果,有人问这样的问题,那么,说明他还完全没有容器的思维。上面说的这个,其实就成了将容器当虚拟机用了,这将极大地限制了docker原有的灵活扩展能力。因此,可以说是使用Windows docker最糟糕的姿势之一了。

要正确部署一个iis应用到Windows Server Docker,并不是表面那么简单。限于篇幅,并且为了更专注,本文先不涉及容器编排、负载均衡、images的构建和管理等问题(这些要考虑的问题还有很多,以后我们单独聊),这里只关注如何将一个基于iis的应用正确运行于单个Windows Server Docker实例中。即便如此,一般至少也要解决下面这些问题:

  • Dockerfile:如何通过Dockerfile部署应用文件和设置操作系统和IIS配置,如何为不同的运行环境(开发,测试,生产)配置不同参数;

  • 查看系统日志:典型的系统日志包含IIS Logs、Windows Event Log和应用的异常日志;

  • 重启容器实例:当容器实例重启时,如何保证被部署的应用能保持之前的工作状态,能继续服务;

  • 网络路由:包括容器内部如何访问外部系统、docker宿主机如何访问容器内部、外部系统如何访问容器内部;

应用示例

为便于理解和演示,我在github上写了一个简单的示例应用:windows-docker-iis-demo

这个应用只包含一个页面,在我本机运行时,显示类似下面的内容:

Hello Docker!

Configuration:
env1=Dev (from appSettings in web.config)
env2=Dev (from OS environment variable)

Content of C:\Windows\System32\drivers\etc\hosts:# Localhost (DO NOT REMOVE)127.0.0.1

  localhost ::1 localhost ip6-localhost ip6-loopback

其中env1为web.config中的appSettings值,env2读取的系统环境变量,页面最下面打印出当前Windows系统的的hosts。

定义Dockerfile如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值