制作一个交易平台网站,wordpress评论框,快速建设网站视频教程,wordpress留言样式前言#xff1a;docker自从诞生之初#xff0c;就是运行在linux系统中#xff0c;后来windows上也可以运行docker了#xff0c;但是微软是通过自身的hyper-v技术#xff0c;在你的windows系统中虚拟出来了一个小的linux虚拟主机#xff0c;在它上面跑了个docker环境让你用… 前言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所以记得右键托盘中的小鲸鱼切换。成功后可以先尝试跑一个官方的demodocker 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命令无法找到本地资源。我也不知道为啥 psDockerfile中的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 .dockerignore3、创建镜像打开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 test40D:\share\Net40\net40 本机地址持久化的地址C:\inetpub\wwwroot docker镜像中的地址 \inetpub\wwwroot 与上述WORKDIR地址对应