将.net framework 4 部署在docker中的全过程(支持4.0 到 4.8,3.5应该也可以)
前言:
docker自从诞生之初,就是运行在linux系统中,后来windows上也可以运行docker了,但是微软是通过自身的hyper-v技术,在你的windows系统中虚拟出来了一个小的linux虚拟主机,在它上面跑了个docker环境让你用,从而使你感觉到像是在windows上运行docker一样,但是其镜像还是运行在linux container中。
后来微软也出了自己的windows container来运行windows平台下的代码,例如支持.net framework,且.net framework 只能运行在windows container下,不能运行在linux container下。若强行在linux container下拉去windows container的镜像会报错:no matching manifest for linux/amd64 in the manifest list entries.
我们可以使用docker exec 进入容器内部看看
windows 容器:
这些目录是不是很熟悉~~~~ 一个小的windows系统,对于不跨平台的.net framework是无法跑在其中的。
正文
1、在windows上部署docker环境
下载安装这个小鲸鱼,直接可以部署docker环境的可视化工具。desktop docker 仅仅支持win10 pro 或 win10 专业版,并不支持其他windows版本,我使用win10家庭版安装后,发现只能使用linux container,无法切换windows container。这是一个大坑
下载地址: docker-desktop
安装完成后,用powshell。输入命令 docker --version
证明以安装成功
因为我们要使用windows container,所以记得右键托盘中的小鲸鱼切换。
成功后,可以先尝试跑一个官方的demo
docker run -it --rm -p 8000:80 --name aspnet_sample mcr.microsoft.com/dotnet/framework/samples:aspnetapp
微软官方操作文档 https://docs.microsoft.com/en-us/aspnet/mvc/overview/deployment/docker-aspnetmvc
但是我在操作过程中,还是遇到了一些坑。
2、创建一个.net framework4.0 项目,并为其添加dockerfile
简简单单写个demo,只添加了一个WebForm1.aspx页面。然后对着项目右键=>添加=>docker支持 生成Dockerfile(若没有docke支持,只需要自己手动建一个同名文件即可),将其资源类型设为始终复制。右键发布!
来到发布后的文件夹中
此处有个关于dockerfile位置的大坑,一定要注意文件夹的位置,在.netcore中Dockfile和****.csproj在同一目录下是没问题的,但是.net framework又写奇怪,一定要改为如下的目录结构
也就是说将Dockerfile提到上一层中,不然COPY命令无法找到本地资源。(我也不知道为啥)
ps:Dockerfile中的COPY命令: COPY [本地host文件地址] [镜像内的要存放的文件地址] 也就是说将本地的发布文件复制到镜像内去。
打开这里的Dockerfile进行编写
内容如下:
FROM microsoft/aspnet (运行.net framework的基础镜像,其中包括sdk 和 iis,以为.net framework不像.netcore有kerstrel支持其自己跑起来,所以必须要有个iis来辅助,这个镜像中的iis仅支持64的发布程序,不支持32位)
WORKDIR /inetpub/wwwroot (镜像中发布文件的存放地址,这个地址不能变。)
COPY net40 . (传输文件到镜像中,我的这个"net40"对应Dockerfile同级的发布文件的文件夹。 文件目录一定不能错)
若目录层级不对,会报错 COPY failed: file not found in build context or excluded by .dockerignore
3、创建镜像
打开powshell,进入Dockerfile所在目录,输入命令创建镜像
docker build . -t net40
如果你第一次拉去这个aspnet的镜像会非常慢,建议更换镜像源。 https://mirror.baidubce.com 这个是百度的镜像源
等待完成后,使用命令将镜像运行起来
docker run -it -d -p 8040:80 net40
-d 后台运行
-p 暴漏出的端口 8040:40 将镜像中的80端口映射到本地的8040端口,framework默认运行在镜像中的iis上的就是80端口,无需代码中修改
net40 是上述image镜像的名字
4、浏览器预览
打开本地浏览器,localhost:8040/WebForm1.aspx
成功
如果报错404 或者 403 , 那一定是copy命令或目录层级的问题,使用docker exec进入到容器/inetpub/wwwroot中,多半是空的
5、log日志写在本地,需要持久化问题
对于.net framework项目,多半是老项目,日志文件一般都会写在本地,但如果镜像重启或删除,日志文件也随之消失。
解决此问题可以使用docker volume挂载卷,将/inetpub/wwwroot下的代码都挂载在一个本机的文件夹下,这样就不会丢失了,具体命令
docker run -it -d -p 8040:80 -v D:\share\Net40\net40:C:\inetpub\wwwroot test40
D:\share\Net40\net40 本机地址,持久化的地址
C:\inetpub\wwwroot docker镜像中的地址 '\inetpub\wwwroot' 与上述WORKDIR地址对应
将.net framework 4 部署在docker中的全过程(支持4.0 到 4.8,3.5应该也可以)相关推荐
- Asp.Net Core WebAPI+PostgreSQL部署在Docker中
PostgreSQL是一个功能强大的开源数据库系统.它支持了大多数的SQL:2008标准的数据类型,包括整型.数值值.布尔型.字节型.字符型.日期型.时间间隔型和时间型,它也支持存储二进制的大对像,包 ...
- docker脚本安装 阿里云_让运行在 Docker 中的 Ghost 支持阿里云 OSS
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载.或重新修改使用,但需要注明来源. 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2020年03月1 ...
- docker -v 覆盖了容器中的文件_springboot配合maven打成可执行jar,构建镜像部署到docker容器中...
本篇文章将介绍springboot应用如何打成jar包,并将jar构建为docker镜像部署到docker中 应用打包 需要配合spring-boot-maven-plugin打包,将以下代码放到应用 ...
- 在Windows系统下,基于WLS从零开始部署我的 R shiny项目到 Docker 中,并将镜像发布到 Docker Hub(内附详细操作流程)
前言 需要将项目部署到Docker中,我之前也没有接触过这个,纯萌新记录一下整个过程. 注意:整个流程对于我来说是能成功跑通的,但我也不知道有没有冗余操作(因为我也不太懂),欢迎大家提出宝贵意见~ 我 ...
- 在Mac的Docker中运行DotNetCore2.0
最近学习Angular4,服务端准备使用DotNetCore API来实现,本文简单介绍下在Mac中怎样将DotNetCore程序部署在Docker中,并使用Nginx做反向代理让程序可以跑起来. 具 ...
- ASP.NET Core 网站在Docker中运行
Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...
- 《果壳中的C# C# 5.0 权威指南》 (09-26章) - 学习笔记
<果壳中的C# C# 5.0 权威指南> ========== ========== ========== [作者] (美) Joseph Albahari (美) Ben Albahar ...
- docker部署python web应用_在 Docker 中运行一个 Python 的 Web 应用
几周前, Elastic Beanstalk声明在AWS云中配置和管理Docker容器.在本文中,我们通过一个简单的注册表单页面应用去理解Docker部署过程,该表单使用Elastic Beansta ...
- docker 中部署一个springBoot项目
docker 中部署一个springBoot项目 (1)介绍 springBoot项目 1.项目结构 2.pom.xml [java] view plaincopy <?xml version= ...
最新文章
- java反射的性能问题
- python密码学编程pdf-Python密码学编程 PDF 下载
- HTML基础重要知识点图文,HTML5基础知识点总结
- Coursera课程Python for everyone:Quiz: Many-to-Many Relationships and Python
- RAC实例 表空间 维护
- CodeForces - 1350E Orac and Game of Life(bfs)
- HTMLCSS 超简单的前端设计入门-2!
- SpringBoot 集成log4j2
- 苹果mac图像编辑和设计工具:Photoshop 2021
- Teleport Pro v1.72 中文破解版网页离线浏览工具下载
- 首届 RustCon Asia 圆满落幕——Love is electricity for RustCon Asia
- python科学计算最佳实践_Python科学计算最佳实践:SciPy指南
- 认识计算机微课导学单,微课“任务单”与“导学案”之比较
- opencv的极线几何
- 基于深度学习的命名实体识别研究综述——论文研读
- 实时操作系统μcos-III移植
- 技术贴(1):将移动硬盘名从F盘改为E盘
- 追MM与Java的23种设计模式(转)_三木_新浪博客
- python 处理json多层嵌套_python解析多层嵌套json
- 字符串什么时候用单引号,什么时候用双引号?