centos7.x docker 跑vs2017发布的asp.net core2.x项目

因为vs2017在windows下配docker支持,要开启docker for windows版本的服务,挺重的,资源消耗颇大,而且最坑爹的是发布并不支持直接发成docker包,还是要你自己去用dockerfile来建立镜像,我这里不把项目文件打包进docker镜像,而是用-v方式挂载相关目录进docker来运行,这样搭配一些分布式存储方案其实可以节省不少打包麻烦和存储空间的;

windows内:

做一个vs2017(15.8版本)新建.net core项目 asp.net core web应用程序api项目模板 asp.net core2.1 不选docker支持(选了调试比较重,可以之后添加用于linux docker的调试,不过如果.net core跨平台性支持够好其实根本不需要的) https开着,不过默认发布到linux的时候最后好像都是http;

新建得项目WebApplication1,调试的话

https://localhost:5001/api/values会返回一个json文件内容是

["value1","value2"];

发布(新建配置文件):

发布方法:选文件系统;

设置:Release;

目标框架:我这时候暂时是 netcoreapp2.1;

部署模式:选独立,发布完,整体文件较多,较大,我目前实测大概是93mb+;

选框架依赖,发布完,整体文件数很少,实测不到2mb大;

因为是发布到centos7.x docker 所以目标运动时:linux-x64;

发布完默认文件在项目文件夹inRelease etcoreapp2.1publish下;

 传给linux方法多样而我喜欢开启本地windows的iis功能,然后将publish下文件打包成publish.zip,然后复制到iis目录下,默认是C:inetpubwwwroot;

linux:

将windows发布目录publish下的文件都打包,传送到linux下,解压到/dotnet下:

curl -O http://192.168.1.4/publish.zip;

安装解压zip的库:

yum makecache fast;yum install unzip -y;

解压到相关目录:

unzip -n -d /dotnet publish.zip;

部署模式选独立:

chmod u+x /dotnet/WebApplication1

docker run -dit  --restart=always --name=dotnet -p 80:80 -v /dotnet:/dotnet --hostname dotnet microsoft/dotnet:2.2-runtime /dotnet/WebApplication1;

microsoft/dotnet:2.2-runtime镜像大小180.5mb;

加上项目文件93mb+,共273mb+大;

部署模式选框架依赖:

WebApplication1.dll;

microsoft/dotnet:2.2-aspnetcore-runtime镜像大小257.8mb;

加上项目文件2mb-,共259mb大;

我的建议是选择第二种方式,包比较小哦,而且我看了vs2017给项目添加的docker支持里的dockerfile的from底包,就是aspnetcore-runtime;