烟酒人 發表於 2019-8-3 09:35:00

Asp.Net Core 发布到 Docker(Linux Centos 虚拟机,使用Dockerfile)

<p>实践一下 Asp.Net Core (基于.net core 2.2)部署到Docker</p>
<p>一、准备工作:</p>
<p>1. 使用Virtualbox创建一个Centos系统的虚拟机,并安装docker和vim</p>
<p>2. 配置好端口(如下图,后面需要使用)</p>
<p><img src="https://img2018.cnblogs.com/blog/336878/201908/336878-20190803081845397-1744094769.png" alt=""></p>
<p>&nbsp;</p>
<p>3. 准备一个网站发布包(我采用的默认的Asp.Net Core MVC),windows发布时的配置(也可以在linux上进行发布),将发布包放入linux虚拟机(我的路径是:/root/Root/DefaultHttp/publish)</p>
<p><img src="https://img2018.cnblogs.com/blog/336878/201908/336878-20190803081351021-1534587725.png" alt=""></p>
<p>&nbsp;4. 测试一下发布包是否正常(可选,需要在linux安装.net core sdk,如果版本较低,需要使用sudo yum update命令更新)</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:false;">dotnet publish/DefaultHttp.dll</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/336878/201908/336878-20190803085948656-875693547.png" alt=""></p>
<p>如图显示,是正常的</p>
<p>5. 创建Dockfile文件(路径:/root/Root/DefaultHttp/,即和publish文件夹同级),并把下面的代码放入文件中。</p>
<div class="cnblogs_code">
<pre>FROM mcr.microsoft.com/dotnet/core/aspnet:<span style="color: rgba(128, 0, 128, 1)">2.2</span><span style="color: rgba(0, 0, 0, 1)">
WORKDIR </span>/<span style="color: rgba(0, 0, 0, 1)">app
EXPOSE </span><span style="color: rgba(128, 0, 128, 1)">5000</span><span style="color: rgba(0, 0, 0, 1)">
# 一般情况下必须开放
EXPOSE </span><span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">
# 如果使用https,记得打开443端口,但是一般不用
#EXPOSE </span><span style="color: rgba(128, 0, 128, 1)">443</span><span style="color: rgba(0, 0, 0, 1)">

COPY publish</span>/ /<span style="color: rgba(0, 0, 0, 1)">app
ENTRYPOINT [</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dotnet</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DefaultHttp.dll</span><span style="color: rgba(128, 0, 0, 1)">"</span>]</pre>
</div>
<p>说明:</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;asp.net core 镜像:https://hub.docker.com/_/microsoft-dotnet-core-aspnet/&nbsp;</p>
<p>至此,准备工作完成。</p>
<p>二、创建镜像</p>
<p>1. 切换至&nbsp;/root/Root/DefaultHttp/</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:false;">cd Root/DefaultHttp/
</pre>
</div>
<p>2. 执行以下命令,使用Dockerfile创建镜像(镜像名称为:firsthttp/default)</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:false;">docker build -t firsthttp/default .
</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/336878/201908/336878-20190803091153083-1183803018.png" alt=""></p>
<p>3. 执行docker images 命令查看生成的镜像</p>
<p><img src="https://img2018.cnblogs.com/blog/336878/201908/336878-20190803091303678-47906264.png" alt=""></p>
<p>&nbsp;</p>
<p>三、运行容器</p>
<p>1. 执行以下命令,运行容器(linux虚拟机的8010端口映射docker容器的80端口)</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:false;">docker run -d -p 8010:80 -p 5000:5000 --name first firsthttp/default
</pre>
</div>
<p>2. 查看运行中的容器</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:false;">docker ps
</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/336878/201908/336878-20190803091703634-1429856286.png" alt=""></p>
<p>3. 查看容器日志</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:false;">docker logs -f ef5d4c3870f1
</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/336878/201908/336878-20190803091850236-272394473.png" alt=""></p>
<p>为什么需要这个步骤?</p>
<p>查看容器运行的日志信息,防止发生错误,也可以知道容器开放的端口(这里是80,映射到linux虚拟机是8010端口,映射到主机也是8010端口(第一步的准备工作中有))</p>
<p>4. 在linux虚拟机查看结果,执行以下命令</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:false;">curl http://localhost:8010
</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/336878/201908/336878-20190803092432571-178336777.png" alt=""></p>
<p>5. 在主机访问</p>
<p><img src="https://img2018.cnblogs.com/blog/336878/201908/336878-20190803092535464-1725025097.png" alt=""></p>
<p>至此,部署完成。</p>
<p>四、删除容器和镜像</p>
<p>&nbsp;<span class="cnblogs_code"><span style="color: rgba(0, 0, 0, 1)">#删除容器 docker </span><span style="color: rgba(0, 0, 255, 1)">rm</span><span style="color: rgba(0, 0, 0, 1)"> 容器ID #删除镜像 docker rmi firsthttp</span>/default</span>&nbsp;</p>
<p>五、总结:</p>
<p>1. Docker容器对外发布的是80端口(需要使用docker logs命令查看)</p>
<p>2. 执行docker run 命令运行容器时,可以添加 -v 参数,映射指定的数据卷(这里是publish文件夹),下次更新程序时,会自动更新到docker,只需要重启docker即可(docker restart firsthttp/default)</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/zhizihuakai/p/11293802.html
頁: [1]
查看完整版本: Asp.Net Core 发布到 Docker(Linux Centos 虚拟机,使用Dockerfile)