docker运行gunicorn、sanic web服务;nginx做反向代理负载;镜像上传阿里云仓库
nginx(反向代理服务器)------负载分发----》gunicorn(web服务器)+ sanic(web服务内容)#########################################3gunicorn(web服务器)+ sanic(web服务内容)可以整体打包成一个docker服务,分发到多个服务器;然后通过nginx进行反向代理负载到不同服务器进行提供服务docker运行g
流程链条
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

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