村东的梧桐树上有只喜鹊 發表於 2019-7-6 15:23:00

Linux服务器使用Docker部署.net Core项目

<h3 id="发布aspnet-core项目">发布ASP.NET Core项目</h3>
<p>和普通的项目发布一样,将项目发布到目标文件夹中</p>
<h3 id="构建dockerfile文件">构建Dockerfile文件</h3>
<p>在目标文件根目录新建Dockerfile文件(没有后缀)</p>
<pre><code>FROM microsoft/dotnet//基于'microsoft/dotnet' 来构建镜像
COPY . /app //拷贝项目文件夹中的所有文件到docker容器中的app文件夹 这里是两个参数
WORKDIR /app //设置工作目录为 '/app' 文件夹,即容器启动默认的文件夹
EXPOSE 80 //设置Docker容器对外暴露80端口
CMD ["dotnet", "Core.Web.dll"] //使用'dotnet Core. Web.dll'来运行应用程序
</code></pre>
<h3 id="上传项目文件">上传项目文件</h3>
<p>1.将项目构建为镜像<br>
将文件上传到Linux的www目录下,使用命令构建成镜像</p>
<pre><code>docker build -t testcore .//-t 指定镜像名 . 表示Dockerfile所在目录
</code></pre>
<p>注意 dockerfile中基于microsoft/aspnetcore或microsoft/dotnet来构建镜像(dotnet&gt;aspnetcore)需要以服务器上安装的镜像版本做区分</p>
<p>构建成功,在镜像中可以看到新建的镜像<br>
<img src="https://img2018.cnblogs.com/blog/1676882/201907/1676882-20190706152217648-1540967719.png"></p>
<p>2.将镜像发布为容器</p>
<pre><code>docker run --name testapp -d -p 8000:80 -v /www:/app testcore
--name指定容器名称
-d 指定容器后台运行
-p 指定外部8000端口映射到容器80端口
-v 绑定数据卷/www到容器内的/app (本地目录:容器内目录)本地目录必须为绝对路径
testcore镜像名
</code></pre>
<p>3.查看容器是否是否处于运行状态,若启动失败显示为exit,可查看日志</p>
<pre><code>docker ps -a //查看所有容器的运行状态

docker exec -it testapp bash //若容器正在运行,进入容器内部
docker logs testapp//若容器未运行,查看报错日志
</code></pre>
<p>4.请求网站查看网站是否运行成功</p>
<pre><code>curl 0.0.0.0:8000
curl -s -D - localhost:8000 -o /dev/null //查看请求返回信息
</code></pre>
<p>最后查看防火墙端口开放情况,以及阿里云后台安全组端口开放情况(如果你是用的阿里云服务),再通过外网访问瞅瞅</p>
<p>5.更新代码<br>
由于在创建容器的时候映射了数据卷,则当有静态文件更新的时候,会自动更新到容器内。<br>
但是当有dll文件更新时,需要手动重启一下容器</p>
<pre><code>docker restart testapp
</code></pre>
<p>以上,实现了将一个Asp.Net Core MVC项目发布到docker中的全过程。目前容器中只有一个dotnet镜像,通过地址访问网站实际上直接访问的<strong>Kestrel</strong>服务器。</p>
<h3 id="一些额外的想法">一些额外的想法</h3>
<p>Kestrel服务器只是一个轻量级的web服务器,并且不支持基于主机名的绑定(如果1台服务器部署了多个 ASP.NET Core 站点,每个站点需要使用不同的端口)<br>
出于安全性考虑(包括但不限于适当的超时,大小的限制,以及并发连接限制等问题)需要在Kestrel和Internet之间加入一个反向代理服务器(IIS,Nginx或者Apache)</p>
<p>下一篇,描述一下我在使用nginx转发请求给Kestrel时遇到的问题。</p><br><br>
来源:https://www.cnblogs.com/cplemom/p/11142857.html
頁: [1]
查看完整版本: Linux服务器使用Docker部署.net Core项目