ASP.NET Core开发-Docker部署运行
<p>ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行。我们将ASP.NET Core 部署在Docker 上运行。</p><p>大家可能都见识过Docker ,今天我们就详细了解一下Docker的用途,以及真实的应用场景。</p>
<p>Docker源于PaaS,PaaS的应用场景即是Docker的应用场景。</p>
<p>Platform as a Service: 平台即服务, 是面向<strong>软件开发者</strong>的服务, 云计算平台提供硬件, OS, 编程语言, 开发库, 部署工具, 帮助软件开发者更快的开发软件服务. 比如Google的GAE.</p>
<p>八个Docker的真实应用场景 http://dockone.io/article/126</p>
<p>Docker 最大优势:</p>
<p>静态打包:把应用程序及其运行时打包为一个镜像;<br>动态运行:以一个应用容器的形式运行这个应用。</p>
<p>我们无需再关心每个系统要安装什么环境,直接将镜像复制到系统中运行。</p>
<p>一次打包,直接运行。</p>
<p><img src="http://images2015.cnblogs.com/blog/443844/201608/443844-20160829092031683-63689031.png"></p>
<p>参考Docker 的 logo ,我们可以将Docker 理解为鲸鱼上的集装箱,而鲸鱼就是操作系统。</p>
<p>Docker 是一个集装箱,将所有的环境打包好在一起,我们只需要考虑挪动集装箱。</p>
<p> </p>
<p>下面我们就来正式开.NET Core 的Docker 之旅。</p>
<p> </p>
<h2>Docker 命令:</h2>
<p>docker 命令相关了解。</p>
<div class="cnblogs_code">
<pre>docker images <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">镜像列表</span>
<span style="color: rgba(0, 0, 0, 1)">
docker ps </span>-a <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">所有运行过的容器</span>
docker ps -l <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">最后运行容器</span>
<span style="color: rgba(0, 0, 0, 1)">
docker export 容器id </span>> 文件<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">持久化容器</span>
<span style="color: rgba(0, 0, 0, 1)">
docker import 文件 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">导入容器</span>
<span style="color: rgba(0, 0, 0, 1)">
cat export.tar </span>| docker import - linezero/demo-<span style="color: rgba(0, 0, 0, 1)">export:latest
docker save 镜像id </span>> 文件 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">持久化镜像</span>
<span style="color: rgba(0, 0, 0, 1)">
docker load </span><<span style="color: rgba(0, 0, 0, 1)"> 文件
docker rm 容器id </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">删除容器</span>
<span style="color: rgba(0, 0, 0, 1)">
docker rmi 镜像id</span>/镜像名称<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">删除镜像</span>
<span style="color: rgba(0, 0, 0, 1)">
docker run 镜像 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">运行</span></pre>
</div>
<p> </p>
<p>提示:可以使用 docker rm $(docker ps -q -a) 一次性删除所有的容器,docker rmi $(docker images -q) 一次性删除所有的镜像。</p>
<p> </p>
<h2>ASP.NET Core 运行于Docker</h2>
<p><strong>本文环境 :Ubuntu 14.04 Docker for Linux 1.11.2</strong></p>
<p> </p>
<p><span style="line-height: 1.5">首先我们创建一个ASP.NET Core 应用。</span></p>
<p><strong><span style="line-height: 1.5">dotnet new -t web</span></strong></p>
<p>然后在<strong>Program.cs</strong> 添加 <strong>UseUrls("http://*:5000")</strong></p>
<p><span style="line-height: 1.5"><img src="http://images2015.cnblogs.com/blog/443844/201608/443844-20160830144637715-2002350940.png"></span></p>
<p><span style="line-height: 1.5">还原 <strong>dotnet restore</strong></span></p>
<p><span style="line-height: 1.5">发布 </span><strong><span style="line-height: 1.5">dotnet publish</span></strong></p>
<p><span style="line-height: 1.5">我们在 publish 文件夹添加 Dockerfile文件</span></p>
<div class="cnblogs_code">
<pre>FROM microsoft/<span style="color: rgba(0, 0, 0, 1)">dotnet:latest
COPY . </span>/<span style="color: rgba(0, 0, 0, 1)">app
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)">tcp
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)">aspnetcore.dll</span><span style="color: rgba(128, 0, 0, 1)">"</span>]</pre>
</div>
<p><span style="line-height: 1.5">最终 <strong>publish </strong>目录如下:</span></p>
<p><span style="line-height: 1.5"><img src="http://images2015.cnblogs.com/blog/443844/201608/443844-20160830154650605-31835669.png"></span></p>
<p> </p>
<p> </p>
<p><span style="line-height: 1.5">将publish 文件夹复制到Ubuntu系统</span></p>
<p><span style="line-height: 1.5">运行构建命令,</span>构建Docker 镜像。 </p>
<blockquote>
<p>docker build -t linezero/demo .</p>
</blockquote>
<p>后面的点是需要的。</p>
<p><img src="http://images2015.cnblogs.com/blog/443844/201608/443844-20160830152017636-1291085057.png"></p>
<p>然后运行容器</p>
<blockquote>
<p>docker run -it -p 8080:5000 linezero/demo</p>
</blockquote>
<p> <img src="http://images2015.cnblogs.com/blog/443844/201608/443844-20160830152635324-2063224139.png"></p>
<p> </p>
<p>容器跟镜像的关系,一个镜像可以创建多个容器。</p>
<p>如上面的,我可以再创建一个 docker run -d -p 8090:5000 linezero/demo </p>
<p>-d 参数也就是后台运行,然后通过docker ps 可以看到容器运行的状态,通过docker stop 容器id 停止。</p>
<p> </p>
<h3>Dockerfile Docker 容器配置文件</h3>
<p>源码模板</p>
<div class="cnblogs_code">
<pre>FROM microsoft/<span style="color: rgba(0, 0, 0, 1)">dotnet:latest
COPY . </span>/<span style="color: rgba(0, 0, 0, 1)">app
WORKDIR </span>/<span style="color: rgba(0, 0, 0, 1)">app
RUN [</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)">restore</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]
RUN [</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)">build</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]
EXPOSE </span><span style="color: rgba(128, 0, 128, 1)">5000</span>/<span style="color: rgba(0, 0, 0, 1)">tcp
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)">run</span><span style="color: rgba(128, 0, 0, 1)">"</span>]</pre>
</div>
<p> </p>
<p>发布后模板</p>
<div class="cnblogs_code">
<pre>FROM microsoft/<span style="color: rgba(0, 0, 0, 1)">dotnet:latest
COPY . </span>/<span style="color: rgba(0, 0, 0, 1)">app
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)">tcp
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)">xx.dll</span><span style="color: rgba(128, 0, 0, 1)">"</span>]</pre>
</div>
<p>以上模板都依赖于 microsoft/dotnet 镜像,单独安装的命令为</p>
<p>docker pull microsoft/dotnet</p>
<p>也可以先不安装,build 的时候会为我们安装。国内速度可能有些慢,请耐心等待。</p>
<p>有了Docker dotnet 镜像,你无需折腾dotnet sdk 安装,镜像自带。</p>
<p> </p>
<p>我们如果想将Docker 放置到其他机器运行,很简单。</p>
<p>直接保存镜像,然后复制镜像到其他机器,然后使用docker 命令load 既可。</p>
<p>docker save linezero/demo > demo.tar</p>
<p>然后加载命令</p>
<p>docker load < demo.tar</p>
<p>然后就可以使用docker run 运行程序了,无需关心程序需要哪些依赖。</p>
<p> </p>
<p><span style="font-size: 18px">如果你觉得本文对你有帮助,请点击“<strong>推荐</strong>”,谢谢。</span></p>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
<div style="line-height: 2em; font-weight: bold">
<span style="color:red;">ASP.NET Core 3.1 新书发布</span>
《ASP.NET Core项目开发实战入门》
京东
当当
淘宝
</div>
<div style="line-height: 2em">
GitHub:https://github.com/linezero
</div>
<div style="line-height: 2em">
博客示例代码GitHub:https://github.com/linezero/Blog
</div><br><br>
来源:https://www.cnblogs.com/linezero/p/docker.html
頁:
[1]