碧纱笼 發表於 2020-3-31 21:41:00

Docker教程:使用Docker容器运行Nginx并实现反向代理

<h1 style="background: rgba(43, 102, 0, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, 75, 1), 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: rgba(255, 255, 255, 1)">一、前言</h1>
<p>我们知道,为了安全考虑,我们一般会设置反向代理,用来屏蔽应用程序真实的IP和端口号。在Linux系统上最常用的反向代理就是Nginx。本篇文章中,我们会通过Docker容器分别运行一个Nginx容器和一个ASP.NET Core应用程序的容器,然后设置反向代理。</p>
<h1 style="background: rgba(43, 102, 0, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, 75, 1), 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: rgba(255, 255, 255, 1)">二、运行Nginx容器</h1>
<h2 style="background: rgba(43, 102, 149, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, 75, 1), 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: rgba(255, 255, 255, 1)">1、获取Nginx镜像</h2>
<p>要运行容器,首先需要有相应的镜像,使用下面的命令拉取NGINX镜像:</p>
<div class="cnblogs_code">
<pre>docker pull nginx</pre>
</div>
<p>如图所示</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200329165951128-888835345.png"></p>
<h2 style="background: rgba(43, 102, 149, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, 75, 1), 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: rgba(255, 255, 255, 1)">2、运行Nginx容器</h2>
<p>获取Nginx镜像之后,我们就可以根据镜像来运行容器</p>
<div class="cnblogs_code">
<pre>docker run --name=nginx -d -p <span style="color: rgba(128, 0, 128, 1)">4030</span>:<span style="color: rgba(128, 0, 128, 1)">80</span> nginx</pre>
</div>
<p>上面命令的解释如下:</p>
<ol>
<li>--name:设置容器的名称。</li>
<li>-d:表示在后台运行容器。</li>
<li>-p:指定端口映射。4030是宿主机的端口,80是Nginx容器内部的端口。</li>
<li>nginx:表示根据nginx镜像运行容器。</li>
</ol>
<p>如图所示</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200329170201505-1646826235.png"></p>
<p>然后在浏览器里面访问:</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200329171124645-1469116565.png"></p>
<p>出现上面的截图,就说明Nginx容器运行成功。</p>
<h1 style="background: rgba(43, 102, 0, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, 75, 1), 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: rgba(255, 255, 255, 1)">三、运行ASP.NET Core应用程序</h1>
<h2 style="background: rgba(43, 102, 149, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, 75, 1), 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: rgba(255, 255, 255, 1)">1、构建ASP.NET Core应用程序镜像</h2>
<p>我们在宿主机上面创建一个demo目录,然后在创建一个ReverseProxy目录,把发布后的项目上传到ReverseProxy目录下面</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331204446700-1481382153.png"></p>
<p>上传项目后的目录结构</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331204546387-1883254619.png"></p>
<p>然后我们使用下面的命令创建镜像</p>
<div class="cnblogs_code">
<pre>docker build -t reverseproxy .</pre>
</div>
<p>上面命令的解释:</p>
<ol>
<li>-t:表示给镜像起一个名字。</li>
</ol>
<blockquote>
<p>上面命令最后英文状态的"."不能省略,表示在当前目录中查找Dockerfile文件。</p>
</blockquote>
<p>执行过程如下图所示</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331205038895-575991435.png">执行完成以后,我们就可以看到刚才创建的镜像了</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331205133400-1942637239.png"></p>
<h2 style="background: rgba(43, 102, 149, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, 75, 1), 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: rgba(255, 255, 255, 1)">2、运行应用容器</h2>
<p>创建完镜像以后运行容器</p>
<div class="cnblogs_code">
<pre>docker run --name=reverseproxy -d -p <span style="color: rgba(128, 0, 128, 1)">9020</span>:<span style="color: rgba(128, 0, 128, 1)">80</span> reverseproxy</pre>
</div>
<p>这里使用宿主机的9020端口映射到容器内的80端口。&nbsp;</p>
<p>如图所示</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331205334094-1055041307.png"></p>
<p>从上图中我们可以看到容器已经在运行了,我们在浏览器里面访问,验证容器是否运行成功</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200329172337220-1762772009.png"></p>
<p>出现上图所示的结果,表明容器运行成功。</p>
<h1 style="background: rgba(43, 102, 0, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, 75, 1), 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: rgba(255, 255, 255, 1)">三、设置反向代理</h1>
<p>在上面的步骤中,我们分别运行了nginx容器和ASP.NET Core应用程序的容器,并且都可以在浏览器里面访问,下面我们来设置反向代理。</p>
<p>反向代理实现如下的效果:在浏览器里面访问4030端口的时候跳转到9020端口,浏览器显示ASP.NET Core应用程序。</p>
<p>配置反向代理,我们需要修改Nginx的配置文件。在Nginx的配置文件里面设置反向代理的HTTP地址。</p>
<p>要修改Nginx的配置文件,首先需要进入Nginx容器里面,使用下面的命令进入容器里面</p>
<div class="cnblogs_code">
<pre>docker exec -it nginx /bin/bash</pre>
</div>
<p>上面命令的解释说明:</p>
<ol>
<li>-it:表示分配一个伪终端。</li>
<li>nginx:表示容器的名称,这里也可以使用容器ID。</li>
<li>/bin/bash:表示对容器执行bash操作。</li>
</ol>
<p>执行过程如图所示</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331210615935-1180673797.png">上面的截图中,我们使用ls查看,发现里面其实就是一个Linux操作系统。</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331210704616-781290647.png"></p>
<p>Nginx默认会安装在etc目录下面</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331210753308-1673996973.png">&nbsp;然后进入nginx目录</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331210840523-1961824228.png"></p>
<p>我们看到了nginx.conf配置文件,需要在这个配置文件里面设置反向代理。我们使用vim命令编辑nginx.conf文件:</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331211213744-11737041.png"></p>
<p>我们看最后红框里面的内容,表示使用的是conf.d目录下面的conf文件进行配置。我们进入conf.d目录下面,然后编辑default.conf文件。</p>
<p>要配置反向代理,我们首先需要知道要代理的程序的IP地址,所以在修改配置之前,我们首先需要获取reverseproxy容器的IP地址。</p>
<div class="cnblogs_code">
<pre>docker inspect 容器名称</pre>
</div>
<p>如图所示</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331211538974-451659665.png">我们会看到很多信息,这里只需要关注最后的网络配置信息即可</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331211634891-805987551.png"></p>
<p>获取到了容器的IP地址以后,我们就可以配置反向代理了。default.conf文件</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331211928193-1777286076.png"></p>
<p>因为容器是内部访问,所以设置的端口是80,而不是运行容器时设置的9020端口。&nbsp;修改完成之后保存退出。</p>
<p>我们可以使用下面的命令检查一下修改后的配置文件是否有错:</p>
<div class="cnblogs_code">
<pre>nginx -t</pre>
</div>
<p>如图所示</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331212110747-1443079689.png"></p>
<p>如果修改的配置文件没有错误,则退出容器。如果修改的配置文件有错误,要改正错误,然后退出容器。</p>
<p>由于我们修改了配置,所以需要重新运行容器,以便配置生效。</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331212211740-39131587.png"></p>
<p>然后我们在浏览器里面访问4030端口</p>
<p><img src="https://img2020.cnblogs.com/blog/1033738/202003/1033738-20200331212509278-686336704.png"></p>
<p>可以看到页面被代理到了9020端口显示的内容。这样就实现了反向代理。&nbsp;</p><br><br>
来源:https://www.cnblogs.com/dotnet261010/p/12596185.html
頁: [1]
查看完整版本: Docker教程:使用Docker容器运行Nginx并实现反向代理