Docker(二)-在Docker中部署Nginx实现负载均衡【完整教程】

一、前言

【查看完整视频教程(免费),请拉直文尾】

在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署。在本文中,我们将继续介绍利用Docker部署Nginx服务实现负载均衡。文章最后附有Nginx部署的视频全过程。

注:查看公众号历史文章,获知Asp.Net Core应用部署视频教程

二、环境

CentOS7, Docker-ce

三、Nginx服务部署

1.首先我们需要查找Nginx的镜像

docker search nginx

2.从镜像列表中选取其中一个,拉取到本地

docker pull nginx

-nginx: 镜像名称,如果需要特定版本可使用:进行拉取

3.快速启动,在容器中加载镜像文件,并运行

docker run -d -it -p 8080:80 --name nginx8080 nginx

- -d: 后台运行

- -p 8080:80: 端口映射,<本地映射端口>:<容器端口>

- --name nginx8080: 容器名称,名称自定义

-nginx:在2中得到的镜像名称

4.查看Nginx所在容器的状态

docker ps

5.也可以通过浏览器或者使用命令查看Nginx服务

curl http://192.168.138.200:8080/

-192.168.138.200:8080: <本地IP>:<本地映射端口>

6.将容器中Nginx服务的配置文件及首页文件复制到本地

docker cp nginx8080:/etc/nginx ~/nginx	
docker cp nginx8080:/usr/share/nginx/html ~/nginxwww

-nginx8080: Nginx服务容器名称

-/etc/nginx: Nginx服务配置文件存放目录

- ~/nginx: 本地配置文件存放目录,自定义

- /usr/share/nginx/html: Nginx服务html文件默认存放目录

- ~/nginxwww: 本地html文件存放目录,自定义

7.删除的当前Nginx服务,因为我们前面建立的这个Nginx服务是为了验证它能在Docker中运行,以及6中能将默认的配置文件复制到本地(偷懒的步骤)。现在目的都已经达到了,它也就完成自己的使命了。

docker stop nginx8080	
docker rm nginx8080

--nginx8080: Nginx服务容器名称

8.将本地文件映射到容器中,再部署Nginx服务。把配置文件放在本地,这样就可以方便我们修改。

docker run -d -it -p 8080:80 --name nginx8080 -v ~/nginx:/etc/nginx -v ~/nginxwww:/usr/share/nginx/html --link=markjiang_dockerdemo:demo nginx

- -v ~/nginx:/etc/nginx: 将本地的配置文件所在目录映射到容器中

- -v ~/nginxwww:/usr/share/nginx/html: 将本地的首页文件映射到容器中

- --link=marijiang_dockerdemo:demo: link连接器,使得容器间可进行单向通信,即Nginx服务可使用别名demo访问容器markjiang_dockerdemo,格式<目标容器名称>:<别名>,别名在Nginx所在容器内部使用

9.查看容器状态

docker ps

10.修改本地配置文件nginx.conf

vi ~/nginx/nginx.conf

编辑nginx.conf文件,在http节点内添加以下内容,并保存

server {	
    listen       80;	
    server_name  localhost;	

	
    location / {	
         root   /usr/share/nginx/html;	
        index  index.html index.htm;	
    }	
    location /api/ {	
         proxy_pass http://demo/api/;	
    } 	
 }

- listen 80: Nginx在容器中占用的端口

- location /: 因为我只想转发api的请求,首页文件直接使用Nginx服务自身的即可,因此特地声明一个路径

- location /api/: 将包含"/api/"的请求全部转发到真正的.Net服务中

-proxy_pass http://demo/api/: demo即为8中定义的别名

11.重启Nginx服务,读取最新的配置文件

docker restart nginx8080

-nginx8080: Nginx服务容器名称

12.在浏览器中查看或者使用命令向Nginx服务发出api请求

curl http://192.168.138.200:8080/api/values

13.新增一个Asp.Net Core应用,用于负载均衡

docker run -d -it -p 8091:80 --name markjiang_dockerdemo2 markjiang/dockerdemo

-markjiang/dockerdemo: 使用原有的镜像即可

14.修改本地配置文件nginx.conf

vi ~/nginx/nginx.conf

编辑nginx.conf文件,在server节点内修改以下内容,并保存

server {	
    listen       80;	
    server_name  localhost;	

	
    location / {	
         root   /usr/share/nginx/html;	
        index  index.html index.htm;	
    }	
    location /api/ {	
         proxy_pass http://apiserver/api/;	
    } 	
 }	
 upstream apiserver {	
    server demo weight=1;	
    server demo2 weight=1;	
 }

- proxy_pass http://apiserver/api/: apiserver为服务器组名,自定义

- upstream apiserver: 定义服务器组

- weight=1: 负载均衡中该服务所占的权重,权重自定义

15.重建Nginx服务,添加新服务别名,读取最新的配置文件,实现负载均衡

docker stop nginx8080	
docker rm nginx8080	
docker run -d -it -p 8080:80 --name nginx8080 -v ~/nginx:/etc/nginx -v ~/nginxwww:/usr/share/nginx/html --link=markjiang_dockerdemo:demo --link=markjiang_dockerdemo2:demo2 nginx

16.关于.Net应用部署

在我的这个例子中,还是会将.Net应用的端口映射到本地端口中,可以让客户端直接调用,但在实际应用中,因为有了Nginx进行反向代理,我们的.Net应用就不需要把端口暴露出来,这样跟外界隔绝了会更加安全,因此我们在执行docker run命令时,只要将 -p 8090:80参数删掉就可以了。

以下视频,请带上耳机开始聆听

往期教程:

.NET开发框架(一)-框架介绍与视频演示

.NET开发框架(二)-框架功能简述

.NET开发框架(三)-高可用服务器端设计

.NET开发框架(四)-服务器IIS实践教程

.NET开发框架(五)-IIS上部署ASP.NET Core项目教程

.NET开发框架(六)-架构设计之IIS负载均衡(视频)

.NET开发框架(七)-技术栈学习目录

.NET开发框架(八)-服务器集群之网络负载平衡(视频)

.NET开发框架(九)-NLB网络负载平衡配置实战(视频)

Hyper-V + CentOS7 安装视频教程

Hyper-V + CentOS7 网络设置(视频教程)

Docker(一)-CentOS7中安装Docker视频教程

CentOS7 vsftp 安装与配置(视频教程)

.NET Core跨平台部署于Docker(Centos)- 视频教程

Ocelot - .Net Core开源网关

Ocelot(二)- 请求聚合与负载均衡

Ocelot(三)- 服务发现

Ocelot(四)- 认证与授权

Ocelot(五)- 流量限制、服务质量

Ocelot(六)- 架构图


Exceptionless - .Net Core开源日志框架

Exceptionless(二) - 使用进阶

Docker(二)-在Docker中部署Nginx实现负载均衡【完整教程】_第1张图片

640?wx_fmt=jpeg

smiley_66.png你点的每一个"在看"

我都当成了喜欢!

640?wx_fmt=gif

你可能感兴趣的:(Docker(二)-在Docker中部署Nginx实现负载均衡【完整教程】)