Windows 应用容器化
背景
在这个时间点,我们可能已经对 Linux 容器使用已经达到熟练掌握的程度,因为 Docker 与 Kubernetes 都是最早为 Linux 平台设计。当我们从容器这项技术中体会到种种收益,对于我们的 windows 的应用是否也能利用容器技术简化我们的开发运维?对于大型的企业来说,Windows 系列的开发程序也会占一定的比例,这个时候领导可能会有一个指示下来:“我们 .Net 应用也要上容器云”。
好的,任务拿到以后我们首先要解决的第一件事就是 Windows 应用容器化,虽然我们知道 .Net Core 是一个可以跨平台运行,但仍然有很多使用 .Net Framwork 编写的应用仍在运行和迭代,所以 Docker on Windows 是一条必须要走的路,好在微软和 Docker 在这方面有足够的投入。
小贴士:对于企业来说,转型并不是把原来所有的资产全部抛弃,是利用能利用的原有资产和新的技术继续向前进
Windows 容器类型
虽然我们常说 Container 的实现方案不仅只有 Docker, 但我们在实际使用上用的最最最多还是 Docker。这里心疼 Docker 三秒钟?。在 Windows 容器化的实现上分为两类:
- Hyper-V 容器
- 类似于 Docker on Mac, Docker on Windows 也经历了通过基于 Hypervisor 的虚拟化技术来实现非原生 Linux 平台上的容器方案。 Mac 上使用的是 hyperkit ,Windows 上有 Hyper-V 。
- 这就相当于每个容器运行在一个被高度优化过的虚拟机里,他们之间不共享操作系统内核,好处是会有更好的安全隔离性,以及在操作系统的内核上有更多的选择性。
- Native 容器
- 类似于我们在 Linux 上使用的容器,基于 process 和 namespace 的隔离。
这两种不同的容器类型,从操作角度上是一致的,像Build、Push、Run 等等,不同的是它是 Windows 环境,需要使用 powershell 或者 cmd 去写 Dockerfile, 当然这个对于 Windows 的运维人员没什么问题。
Windows Dockerfile 示例
看一个简单的例子:
FROM microsoft/windowsservercore:1803COPY ConsoleTest.exe C:/ENTRYPOINT C:/ConsoleTest.exe
我们注意到这个 Dockerfile 的 base 镜像是 windowsservercore:1803 ,意味着这个镜像是可以和 windowsserver 1803 兼容的 Docker 镜像, 这里提到到了一个 Windows Host OS 与 容器 OS 的版本兼容性:
Container OS version | Host OS Version | |||||
---|---|---|---|---|---|---|
Windows Server 2016 Builds: 14393. | Windows 10 1609, 1703 Builds: 14393., 15063. | Windows Server version 1709 Builds 16299. | Windows 10 Fall Creators Update Builds 16299. | Windows Server version 1803 Builds 17134. | Windows 10 version 1803 Builds 17134. | |
Windows Server 2016 Builds: 14393. |
Supports process orhyperv isolation
|
Supports Onlyhyperv isolation
|
Supports Onlyhyperv isolation
|
Supports Onlyhyperv isolation
|
Supports Onlyhyperv isolation
|
Supports Onlyhyperv isolation
|
Windows Server version 1709 Builds 16299. | Not supported | Not supported |
Supports process orhyperv isolation
|
Supports Onlyhyperv isolation
|
Supports Onlyhyperv isolation
|
Supports Onlyhyperv isolation
|
Windows Server version 1803 Builds 17134. | Not supported | Not supported | Not supported | Not supported |
Supports process orhyperv isolation
|
Supports Onlyhyperv isolation
|
翻译过是:
- 相同的 OS 版本可以支持 native container 和 hyperv container
- Host OS 版本高,Container OS 版本低,可以用 hyperv container
- Container OS 比 Host OS 高? 那就不行了。
再看一个例子:
buildapp.ps1
# Remove existing default web site files remove-item C:\inetpub\wwwroot\iisstart.*# Ensure write permissions over web app project files icacls C:\inetpub\wwwroot\WebTest /grant Everyone:F /t /q# Import necessary IIS modules then set app project folder as web application Import-Module IISAdministration Import-Module WebAdministrationNew-Item 'IIS:\Sites\Default Web Site\WebTest' -Type Application -PhysicalPath 'C:\inetpub\wwwroot\WebTest' Set-WebConfigurationProperty -p 'MACHINE/WEBROOT/APPHOST' -fi 'system.applicationHost/log' -n 'centralLogFileMode' -v 'CentralW3C'; ` Set-WebConfigurationProperty -p 'MACHINE/WEBROOT/APPHOST' -fi 'system.applicationHost/log/centralW3CLogFile' -n 'truncateSize' -v 4294967295; ` Set-WebConfigurationProperty -p 'MACHINE/WEBROOT/APPHOST' -fi 'system.applicationHost/log/centralW3CLogFile' -n 'period' -v 'MaxSize'; ` Set-WebConfigurationProperty -p 'MACHINE/WEBROOT/APPHOST' -fi 'system.applicationHost/log/centralW3CLogFile' -n 'directory' -v 'c:\iislog'
runapp.ps1
Start-Service W3SVC; ` Invoke-WebRequest http://localhost -UseBasicParsing | Out-Null; ` netsh http flush logbuffer | Out-Null; ` Get-Content -path 'c:\iislog\W3SVC\u_extend1.log' -Tail 1 -Wait
Dockerfile
FROM microsoft/dotnet-framework:4.7.2-sdk-20180814-windowsservercore-1803# WebTest.NET dependencies RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /NoRestart RUN powershell add-windowsfeature web-asp-net45# Configure Web App COPY runapp.ps1 buildapp.ps1 WebTest.zip C:/SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN powershell -Command { Expand-Archive -Path C:\WebTest.zip -DestinationPath C:\inetpub\wwwroot\WebTest } RUN powershell -Command { Remove-Item C:\WebTest.zip -Force }RUN powershell.exe C:/buildapp.ps1 EXPOSE 80ENTRYPOINT ["powershell", "C:/runapp.ps1"]
上面的例子做了一件事是把 iis 的文件日志输出通过 tail 的方式转换成了标准输出,这样 docker logs
就能看到日志输出了
提问?
- 什么情况下用 ContainerOS 使用 latest 的 tag?
- 如果是在 Kubernetes 的环境下除了通过转换成标准输出,还能怎样采集 iis 的文件日志?
下一篇: 快速搭建 Windows Kubernetes 环境
Ref:
- https://docs.docker.com/docker-for-mac/
- https://github.com/moby/hyperkit
- https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/hyper-v-technology-overview
- https://docs.microsoft.com/en-us/virtualization/windowscontainers/about/#windows-container-types
- https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility
转载于:https://www.cnblogs.com/bigdaddyblog/p/9672415.html
Windows 应用容器化相关推荐
- docker 虚拟机搭建mongodb一主一从一复制_Docker最全教程——MongoDB容器化(十三)...
上一节我们讲述了数据库容器化之持久保存数据,本节将讲诉MongoDB容器化实践,并且接下来将逐步讲解其他数据库(MySql.Redis等等)的容器化实践,然后将讲诉一些分布式架构的项目实践.由于实践需 ...
- netcore更新dll要停止_使 .NET Core 应用程序容器化
在本教程中,你将了解如何使用 Docker 容器化 .NET Core 应用. 容器具有很多特性和优点,如具有不可变的基础结构.提供可移植的体系结构和实现可伸缩性. 此影像可用于为本地开发环境.私有云 ...
- Spring Cloud Kubernetes容器化实践
随着公司业务量和产品线的增加,项目越来越多,普通运维系统架构对整个软件研发生命周期的管理越来越难,效率低下,难以统一管理.近年来Docker统一了容器标准,对于软件开发流程产生了深远的影响,Docke ...
- .NET Core容器化@Docker
转自圣杰.https://www.jianshu.com/p/23465dc86d3e .NET Core容器化@Docker 圣杰 已关注 2017.12.22 21:59* 字数 2999 阅读 ...
- Docker最全教程——数据库容器化之持久保存数据(十一)
Docker最全教程--数据库容器化之持久保存数据(十一) 原文:Docker最全教程--数据库容器化之持久保存数据(十一) 上一节我们讲述了SQL Server容器化实践(注意,SQL Server ...
- 如何容器化你的 ASP.Net Core
Docker 相比 虚拟机 具有更轻量级,更便捷的特性,为什么这么说呢?虚拟机通常打包了完整的操作系统,而容器只仅仅打包了你的应用程序,运行环境及相关依赖库,Docker 是一种开源的工具包,帮助你更 ...
- 谈到云原生, 绕不开容器化
传送门 什么是云原生? 云原生设计理念 .NET微服务 Containers 现在谈到云原生, 绕不开"容器". 在<Cloud Native Patterns>一书中 ...
- 使用Jexus 容器化您的 Blazor 应用程序
在本文中,我们将介绍如何将 Blazor 应用程序放入Jexus 容器以进行开发和部署.我们将使用 .NET Core CLI,因此无论平台如何,使用的命令都将是相同的. Blazor 托管模型 B ...
- 容器化单页面应用中RESTful API的访问
最近在工作中,需要让运行在容器中的单页面应用程序能够访问外部的RESTful API.这个需求看起来并不困难,不过实现起来还是有些曲折的.在此,我就将这部分内容总结一下. 在入正题之前,有个一问题,就 ...
最新文章
- element not visible的解决方法
- 三星手机如何分屏_刷机基础知识三星如何手机进入ODIN模式
- OpenCV3 for python3 学习笔记3-----用OpenCV3处理图像2
- winr8文件服务器,技术讨论 | Windows全版本提权之Win10系列解析
- cad多个窗口并排显示_高版本CAD如何显示阵列窗口?
- 现代语音信号处理之短时傅里叶分析
- 战争机器5加速器信息:开发工作已经完成 更多内容将在科隆展上披露
- WPS公式编辑器编辑公式遇到的问题
- 高通骁龙845的android手机有哪些,骁龙845手机买什么好 目前6款最值得买的骁龙845手机推荐...
- PCM开发板模块实验指导--无刷马达实验
- 8255A并行 I/O 接口芯片
- 服务器认证信息,认证信息管理系统、服务器、方法和程序
- 2018年ACM-ICPC亚洲区域赛(焦作)赛后总结
- IKVM.NET的妙手偶得
- (附源码)ssm高校学生档案信息管理系统 毕业设计 010936
- mysql转sqlserver_mysql迁移sqlserver
- 一本通1034:计算三角形面积
- 2022帆软杯全国高校数据分析与应用联赛来啦!
- Magic Mouse鼠标滚动速度调整
- 智慧大田——智能无线灌溉系统