多多小肥猫 發表於 2017-4-13 08:04:00

ASP.NET Core 网站在Docker中运行

<p>Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境、测试环境、UAT环境、生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署,到处运行。</p>
<p>本文介绍如何把ASP.NET Core网站部署在Docker中运行。</p>
<h2 id="软件环境清单">软件环境清单</h2>
<p>CentOS 7.3.1611<br>
Docker 1.12.6<br>
.NET Core 1.1</p>
<h2 id="安装docker">安装Docker</h2>
<pre><code class="language-php">$ #安装Docker
$ yum install docker
$ #启动docker服务
$ systemctlstart docker.service
$ #配置开机启动
$ systemctlenable docker.service

</code></pre>
<h2 id="配置docker加速器">配置Docker加速器</h2>
<p>由于众所周知的原因,要想流畅地使用Docker,需要配置Docker加速器,否则你会觉得回到了拨号上网的时代。<br>
我使用的是DaoCloud,号称永久免费。注册地址是:https://account.daocloud.io/signin。<br>
<img src="http://images2015.cnblogs.com/blog/278406/201704/278406-20170412142909548-515614087.png"><br>
用微信扫一扫就可以快速完成注册。<br>
注册完成会提供有一个配置脚本地址:<br>
<img src="http://images2015.cnblogs.com/blog/278406/201704/278406-20170412143006095-126107382.png"></p>
<pre><code class="language-php">$ #配置docker加速器
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://xxxxxx.m.daocloud.io
$ #重启生效
$ systemctl restart docker
</code></pre>
<h2 id="拉取aspnet-core镜像">拉取ASP.NET Core镜像</h2>
<pre><code class="language-php">$ docker pull microsoft/aspnetcore
$ #检查是否成功
$ docker images
</code></pre>
<h2 id="准备aspnet-core网站发布文件">准备ASP.NET Core网站发布文件</h2>
<p>可以参考我之前的文章:ASP.NET Core 网站发布到Linux服务器</p>
<h2 id="创建dockerfile">创建Dockerfile</h2>
<p>放到网站根目录,文件内容参考如下:</p>
<pre><code class="language-php">FROM docker.io/microsoft/aspnetcore
COPY ./publish
WORKDIR /publish       
EXPOSE 8080
CMD ["dotnet", "TestAspNetCoreWeb.dll"]
</code></pre>
<h2 id="打包镜像">打包镜像</h2>
<pre><code class="language-php">$ #注意最后有个点。
$ docker build -t test-netcore:1.0 .
</code></pre>
<h2 id="启动容器">启动容器</h2>
<pre><code class="language-php">$ docker run --name test-netcore -p 8080:8080 -d test-netcore:1.0
$ #检查容器是否启动成功,如果启动后没效果,试试docker run 不加-d,如果有报错有提示信息。
$ docker ps
</code></pre>
<p><img src="http://images2015.cnblogs.com/blog/278406/201704/278406-20170412144756845-1412374961.png"><br>
网站运行成功。<br>
<img src="http://images2015.cnblogs.com/blog/278406/201704/278406-20170412145520533-1532931569.png"></p>
<h2 id="附">附</h2>
<p>配置过程我遇到容器启动失败的两个情况:<br>
1.网站的监听使用了ip,报错“Error -99 EADDRNOTAVAIL address not available”<br>
2.网站的监听使用了localhost,报错“curl: (56) Recv failure: Connection reset by peer”<br>
最后发现使用http://*:8080来监听才成功。</p>
<p>docker run 失败后再次运行会提示名称已存在,可以使用docker rm -f [容器名称] 删除容器或换个名称。</p>


</div>
<div id="MySignature" role="contentinfo">
    如果觉得文章还不错,不妨高抬贵手点一下【好文要顶】或者给我提一些建议。<br><br>
来源:https://www.cnblogs.com/keepcodingforever/p/6698862.html
頁: [1]
查看完整版本: ASP.NET Core 网站在Docker中运行