ASP.NET Core 2.1 使用Docker运行
<blockquote><p>重要提示,本文为 ASP.NETCore 2.1 如果你是 2.2 那么请将文中的镜像换为 <code>microsoft/dotnet:2.2.0-aspnetcore-runtime</code>,3.0 <code>mcr.microsoft.com/dotnet/core/aspnet:3.0</code>,,3.1 <code>mcr.microsoft.com/dotnet/core/aspnet:3.1</code> 即可,其他操作一样</p>
</blockquote>
<h2 id="1新建一个-aspnet-core-21-项目">1.新建一个 ASP.NET Core 2.1 项目</h2>
<p><img src="https://images2018.cnblogs.com/blog/668104/201806/668104-20180620003111631-414799564.png" alt="1529417901378" loading="lazy"></p>
<p>然后运行一下项目,确保我们刚刚建立的项目可以正常运行。</p>
<p><img src="https://images2018.cnblogs.com/blog/668104/201806/668104-20180620003111156-2084741306.png" alt="1529418199419" loading="lazy"></p>
<h2 id="2编写-dockerfile">2.编写 Dockerfile</h2>
<p>新建一个文本文件,命名为 <code>Dockerfile</code></p>
<pre><code class="language-shell">FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
COPY . .
EXPOSE 80
ENTRYPOINT ["dotnet", "AspNetCore.Docker.dll"]
</code></pre>
<p>这里我们需要用到官方的镜像:<code>microsoft/dotnet:2.1-aspnetcore-runtime</code></p>
<blockquote>
<p>如果要尝试更小的镜像,可以试试 <code>microsoft/dotnet:2.1-aspnetcore-runtime-alpine</code> ,这镜像使用了<code>alpine</code> 一款精简版极小的linux,但是随之而来的就是阉割了一些功能,实际使用的时候需要测试,比如国际化支持,它默认在这个镜像里面没有开启,需要配置环境变量来开启。</p>
</blockquote>
<p>需要设置Dockerfile的如下属性,保证其能复制到发布目录:</p>
<p><img src="https://images2018.cnblogs.com/blog/668104/201806/668104-20180620003110626-2072983404.png" alt="1529423322744" loading="lazy"></p>
<h2 id="3构建docker镜像">3.构建Docker镜像</h2>
<p>我们将镜像命名为 :<code>aspnetcoredocker</code></p>
<p>进入到发布文件目录,执行命令便可打包镜像:</p>
<pre><code class="language-shell">docker build -t aspnetcoredocker .
</code></pre>
<p>我们可以编写 发布+构建 的脚本。</p>
<p>Windows:</p>
<p>文件名:build.bat</p>
<pre><code class="language-shell">@echo off
echo "Windows Docker build"
cd ../AspNetCore.Docker
dotnet publish -c Release -o ../publish
cd ../publish
echo "publish success"
docker build -t aspnetcoredocker .
</code></pre>
<p>文件名:Linux:</p>
<p>build.sh</p>
<pre><code class="language-shell">#!/bin/bash
echo Linux Docker build
cd ../AspNetCore.Docker
dotnet publish -c Release -o ../publish
cd ../publish
echo publish success
docker build -t aspnetcoredocker .
</code></pre>
<p>文件夹结构如下图:</p>
<p><img src="https://images2018.cnblogs.com/blog/668104/201806/668104-20180620003110221-135257770.png" alt="1529424418158" loading="lazy"></p>
<p>执行构建:</p>
<p><code>./build.sh</code></p>
<p><img src="https://images2018.cnblogs.com/blog/668104/201806/668104-20180620003109828-349852813.png" alt="1529424671621" loading="lazy"></p>
<p>构建成功后可以通过 <code>docker images</code> 命令查询到我们构建的镜像:</p>
<p><img src="https://images2018.cnblogs.com/blog/668104/201806/668104-20180620003109408-432129147.png" alt="1529424760009" loading="lazy"></p>
<blockquote>
<p>若在linux下执行sh脚本时,遇到错误“-bash: ./build.sh: /bin/bash^M: bad interpreter: No such file or directory“,请通过vim/vi编辑sh脚本,按:建,输入 <code>set ff=unix</code>,然后回车、wq保存即可</p>
</blockquote>
<h2 id="4运行镜像">4.运行镜像</h2>
<p>通过命令运行</p>
<pre><code class="language-shell">docker run --name=aspnetcoredocker -p 7777:80 -daspnetcoredocker
</code></pre>
<p><code>--name</code>:指定容器名称</p>
<p><code>-p</code>:指定容器端口</p>
<p><code>-d</code>:指定容器 后台运行</p>
<p>出现一长串字符串,便是表示运行成功:</p>
<p><img src="https://images2018.cnblogs.com/blog/668104/201806/668104-20180620003109017-736460444.png" alt="1529425263500" loading="lazy"></p>
<p>我们也可以通过 <code>docker ps</code> 命令,查询我们正在运行的容器:</p>
<p><img src="https://images2018.cnblogs.com/blog/668104/201806/668104-20180620003108717-1499087563.png" alt="1529425315363" loading="lazy"></p>
<p>我们还可以通过 docker logs <容器名称或者id>来查看启动日志:</p>
<p><img src="https://images2018.cnblogs.com/blog/668104/201806/668104-20180620003108259-1719154048.png" alt="1529425348621" loading="lazy"></p>
<h2 id="5验证访问">5.验证访问</h2>
<p>我们可以通过 <code>curl</code>命令来直接访问我们容器启动的asp.net core 网站:</p>
<p><img src="https://images2018.cnblogs.com/blog/668104/201806/668104-20180620003107872-1293582644.png" alt="1529425443476" loading="lazy"></p>
<p>或者直接通过浏览器访问:</p>
<p><img src="https://images2018.cnblogs.com/blog/668104/201806/668104-20180620003107356-236901831.png" alt="1529425517018" loading="lazy"></p>
<p>至此,我们通过Docker运行asp.net core 2.1应用程序就结束了。</p>
<h2 id="6资料">6.资料</h2>
<p>本文所用代码:https://github.com/stulzq/BlogDemos/tree/master/AspNetCore.Docker</p>
</div>
<div id="MySignature" role="contentinfo">
<blockquote>
<strong>目前学习.NET Core 最好的教程 .NET Core 官方教程 ASP.NET Core 官方教程</strong>
</blockquote><br><br>
来源:https://www.cnblogs.com/stulzq/p/9201830.html
頁:
[1]