流程链条

docker nginx(反向代理服务器)------负载分发----》多个  {gunicorn(web服务器)+ sanic(web服务内容)} docker 打包web服务
#########################################
gunicorn(web服务器)+ sanic(web服务内容)可以整体打包成一个docker服务,分发到多个服务器;然后通过nginx进行反向代理负载到不同服务器进行提供服务

小知识: 客户端- --(正向代理:翻墙)-代理机—(反向代理)–服务器

1、 docker运行gunicorn、sanic web服务

参考:https://zhuanlan.zhihu.com/p/35628677

本实验直接在windows环境下操作的(因为win 下wsl ubuntu环境docker环境不大支持)

在这里插入图片描述
目录情况

.
├── app.py
├── Dockerfile
└── templates
    └── index.html

1 directory, 3 files

app.py

import os
from sanic import Sanic
from sanic.response import html
from jinja2 import Environment, FileSystemLoader

base_dir = os.path.dirname(os.path.abspath(__name__))
templates_dir = os.path.join(base_dir, 'templates')
jinja_env = Environment(loader=FileSystemLoader(templates_dir), autoescape=True)
app = Sanic(__name__)


def render_template(template_name, **context):
    template = jinja_env.get_template(template_name)
    return template.render(context)


@app.route('/')
async def index(request):
    return html(render_template('index.html'))

Dockerfile

FROM taoliu/gunicorn3

WORKDIR /app

ADD . /app

RUN pip install sanic \
    && pip install jinja2

EXPOSE 8080

CMD gunicorn app:app --bind 0.0.0.0:8080 --worker-class sanic.worker.GunicornWorker

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>ltoddy's home</title>
  <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.css">
</head>
<body>
<div class="container">
  <div class="page-header">
    <h1>Welcome</h1>
  </div>
</div>
</body>
</html>

然后再Dockerfile同目录下cmd下运行进行打包,时间可能有点久

 docker build -t sanic-demo .

然后打包完成就可以运行测试:

docker run  -p 9000:8080 sanic-demo:latest
docker run  -p 5000:8080 sanic-demo:latest

web页面打开查看
在这里插入图片描述

如果运行多个docker 作用不同端口,要访问显示内容不一样,可以通过-v 挂载方式,简单操作可以进入容器改下index.html

在这里插入图片描述
在这里插入图片描述

2、 nginx做反向代理

参考:https://www.bilibili.com/video/BV1SE411x7hw
下载:docker pull nginx

运行:docker run --name mynginx -p 8080:80 -d nginx
在这里插入图片描述

进入容器修改配置:

docker exec -it 容器id    /bin/bash
##注意修改容器里内容vim不存在需要安装
apt-get update
apt-get install vim
###
cd etc/nginx/conf.d/
vim default.conf

主要就修改location和增加upstream内容;注意proxy_pass 的ip地址不能填写localhost;因为容器里localhost只表示容器里的localhost,不能映射出来,必须改成宿主机的ip 通过ipconfig查看即可;下图是反向代理到两个端口(5000、9000是另外的服务,这里也可以再起两个nginx服务也可以)负载
在这里插入图片描述
***nginx 容器里index.html 路径再/usr/share/nginx/html下
在这里插入图片描述

前台访问情况,不停刷新,页面会显示不同内容,但访问ip端口都不变,8080是nginx的外部访问端口,自动会负载到其他两个docker sanic服务5000、9000的端口
在这里插入图片描述

在这里插入图片描述

3、镜像上传阿里云仓库

1、首先注册阿里云个人容器镜像服务
https://cr.console.aliyun.com/cn-hangzhou/instances
2、安装步骤创建密码及本地仓库名

在这里插入图片描述
在这里插入图片描述

3、上传本地镜像到阿里云
$ docker login --username=108373****@qq.com registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/loongxl/sanic:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/loongxl/sanic:[镜像版本号]

上传成功可以在镜像版本里看到
在这里插入图片描述

4、拉去自己刚上传阿里云镜像使用
docker pull registry.cn-hangzhou.aliyuncs.com/loongxl/sanic:v1

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐