前言:

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应该也可以)相关推荐

  1. Asp.Net Core WebAPI+PostgreSQL部署在Docker中

    PostgreSQL是一个功能强大的开源数据库系统.它支持了大多数的SQL:2008标准的数据类型,包括整型.数值值.布尔型.字节型.字符型.日期型.时间间隔型和时间型,它也支持存储二进制的大对像,包 ...

  2. docker脚本安装 阿里云_让运行在 Docker 中的 Ghost 支持阿里云 OSS

    本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载.或重新修改使用,但需要注明来源. 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2020年03月1 ...

  3. docker -v 覆盖了容器中的文件_springboot配合maven打成可执行jar,构建镜像部署到docker容器中...

    本篇文章将介绍springboot应用如何打成jar包,并将jar构建为docker镜像部署到docker中 应用打包 需要配合spring-boot-maven-plugin打包,将以下代码放到应用 ...

  4. 在Windows系统下,基于WLS从零开始部署我的 R shiny项目到 Docker 中,并将镜像发布到 Docker Hub(内附详细操作流程)

    前言 需要将项目部署到Docker中,我之前也没有接触过这个,纯萌新记录一下整个过程. 注意:整个流程对于我来说是能成功跑通的,但我也不知道有没有冗余操作(因为我也不太懂),欢迎大家提出宝贵意见~ 我 ...

  5. 在Mac的Docker中运行DotNetCore2.0

    最近学习Angular4,服务端准备使用DotNetCore API来实现,本文简单介绍下在Mac中怎样将DotNetCore程序部署在Docker中,并使用Nginx做反向代理让程序可以跑起来. 具 ...

  6. ASP.NET Core 网站在Docker中运行

    Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...

  7. 《果壳中的C# C# 5.0 权威指南》 (09-26章) - 学习笔记

    <果壳中的C# C# 5.0 权威指南> ========== ========== ========== [作者] (美) Joseph Albahari (美) Ben Albahar ...

  8. docker部署python web应用_在 Docker 中运行一个 Python 的 Web 应用

    几周前, Elastic Beanstalk声明在AWS云中配置和管理Docker容器.在本文中,我们通过一个简单的注册表单页面应用去理解Docker部署过程,该表单使用Elastic Beansta ...

  9. docker 中部署一个springBoot项目

    docker 中部署一个springBoot项目 (1)介绍 springBoot项目 1.项目结构 2.pom.xml [java] view plaincopy <?xml version= ...

最新文章

  1. java反射的性能问题
  2. python密码学编程pdf-Python密码学编程 PDF 下载
  3. HTML基础重要知识点图文,HTML5基础知识点总结
  4. Coursera课程Python for everyone:Quiz: Many-to-Many Relationships and Python
  5. RAC实例 表空间 维护
  6. CodeForces - 1350E Orac and Game of Life(bfs)
  7. HTMLCSS 超简单的前端设计入门-2!
  8. SpringBoot 集成log4j2
  9. 苹果mac图像编辑和设计工具:Photoshop 2021
  10. Teleport Pro v1.72 中文破解版网页离线浏览工具下载
  11. 首届 RustCon Asia 圆满落幕——Love is electricity for RustCon Asia
  12. python科学计算最佳实践_Python科学计算最佳实践:SciPy指南
  13. 认识计算机微课导学单,微课“任务单”与“导学案”之比较
  14. opencv的极线几何
  15. 基于深度学习的命名实体识别研究综述——论文研读
  16. 实时操作系统μcos-III移植
  17. 技术贴(1):将移动硬盘名从F盘改为E盘
  18. 追MM与Java的23种设计模式(转)_三木_新浪博客
  19. python 处理json多层嵌套_python解析多层嵌套json
  20. 字符串什么时候用单引号,什么时候用双引号?

热门文章

  1. java 文件上传至oracle blob字段 实现
  2. 第三课 Makefile文件的制作(上)
  3. Channel Allocation HDU1373
  4. hdu 4530(数学)
  5. Unity中使用RequireComponent,没有添加上组件
  6. C# 中打印、预览、打印机设置和打印属性的方法
  7. 优秀编程网站收录集锦
  8. LOOP WITH CONTROL 用法
  9. Kinect开发笔记之一Kinect详细介绍
  10. 如何在PowerPoint中自动调整图片大小