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

一、前言

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

二、环境

CentOS7, Docker-ce

三、Nginx 服务部署

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

docker search nginx

 

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

docker pull nginx

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

 

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 ~/nginxdocker 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 nginx8080docker 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 nginx8080docker rm nginx8080docker 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(二) – 使用进阶

 

 

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...