前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker(二)-在Docker中部署Nginx实现负载均衡【完整教程】

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

作者头像
.Net框架学苑
发布2019-08-30 21:42:39
2K0
发布2019-08-30 21:42:39
举报
文章被收录于专栏:.Net框架学苑.Net框架学苑
一、前言

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

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

二、环境

CentOS7, Docker-ce

三、Nginx服务部署

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

代码语言:javascript
复制
docker search nginx

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

代码语言:javascript
复制
docker pull nginx

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

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

代码语言:javascript
复制
docker run -d -it -p 8080:80 --name nginx8080 nginx

- -d: 后台运行

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

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

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

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

代码语言:javascript
复制
docker ps

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

代码语言:javascript
复制
curl http://192.168.138.200:8080/

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

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

代码语言:javascript
复制
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中能将默认的配置文件复制到本地(偷懒的步骤)。现在目的都已经达到了,它也就完成自己的使命了。

代码语言:javascript
复制
docker stop nginx8080docker rm nginx8080

--nginx8080: Nginx服务容器名称

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

代码语言:javascript
复制
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.查看容器状态

代码语言:javascript
复制
docker ps

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

代码语言:javascript
复制
vi ~/nginx/nginx.conf

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

代码语言:javascript
复制
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服务,读取最新的配置文件

代码语言:javascript
复制
docker restart nginx8080

-nginx8080: Nginx服务容器名称

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

代码语言:javascript
复制
curl http://192.168.138.200:8080/api/values

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

代码语言:javascript
复制
docker run -d -it -p 8091:80 --name markjiang_dockerdemo2 markjiang/dockerdemo

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

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

代码语言:javascript
复制
vi ~/nginx/nginx.conf

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

代码语言:javascript
复制
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服务,添加新服务别名,读取最新的配置文件,实现负载均衡

代码语言:javascript
复制
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参数删掉就可以了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 dotNet框架学苑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、环境
  • 三、Nginx服务部署
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档