原文转载自「刘悦的技术博客」https://v3u.cn/a_id_165
上一篇文章:Docker在手,天下我有,在Win10零碎下利用Docker部署Gunicorn+Flask打造独立镜像,是在Win10简略玩了一下Docker的镜像打包,属实玩票,娱乐属性较高。要是想真刀真枪的在生产环境部署还得是Centos。
本次应用Nginx反向代理Flask服务,为什么要加一层Nginx呢?因为Nginx能够间接解决动态文件申请而不必通过应用服务器,防止占用贵重的运算资源,并且能够缓存动态资源,使拜访动态资源的速度无效进步。同时它能够排汇一些刹时的高并发申请,让Nginx先放弃住连贯(缓存http申请),而后后端缓缓消化掉这些并发。当然了,最重要的一点就是Nginx能够提供负载平衡策略,这样咱们的应用服务就能够横向扩大,分担压力了。
大体架构如下:
首先出场的是贵为Docker三大外围之一的DockerHub(仓库),咱们能够将打包好的镜像收费push到下面,就这样就能够随时pull本人的镜像,注册地址:https://hub.docker.com/
激活账号当前,创立仓库,这一步和github创立代码仓库差不太多。
填写仓库信息具体为仓库名称、形容以及是否公开或者公有。
创立胜利之后,它就会呈现在镜像列表中
此时咱们须要对本地的镜像重命名,这里重命名为zcxey2911/myflask。因为要与dockerhub上的仓库对应。如果名称不对应是无奈将本地镜像push到线上仓库中。
docker tag myflask zcxey2911/myflask
之后在命令行输出命令
docker login
用DockerHub的账号和明码登录
登录胜利之后,用命令把本地镜像push到hub中
docker push zcxey2911/myflask
留神这里的镜像名称必须和hub中的仓库名称统一,否则将会抛出谬误。
上传胜利后,就能够在DockerHub中看到它了,此时就能随便pull操作了
前置操作曾经结束,此时,登录你的云服务器,这里以百度云的Centos7.7为例子,进入服务器后装置Docker服务
#降级yum sudo yum update #卸载旧版本docker sudo yum remove docker docker-common docker-selinux docker-engine #装置依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 #设置源 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum makecache fast #装置docker sudo yum install docker-ce #启动服务 sudo systemctl start docker
装置实现后键入 docker -v
返回Docker版本号阐明没有问题。
拉取咱们之前打包并且上传到hub的Flask镜像
docker pull zcxey2911/myflask
下载胜利后,会展现在镜像库里
运行我的项目,这里咱们能够采纳后盾守护过程的模式起服务
sudo docker run -d -p 5000:5000 --name testflask zcxey2911/myflask
应用docker ps命令能够看到是否运行胜利。
应用服务器的ip拜访一下Flask服务,这里有个小坑,不论是腾讯云、阿里云还是百度云亦或是各种乌七八糟的云,都须要在平安组策略中凋谢你须要拜访的端口,比方这里我用的5000。
好了,当初咱们同样利用Docker来装置Nginx服务
docker pull nginx
随后启动Nginx测试一下
docker run -d -p 80:80 nginx
当初,咱们将运行Nginx容器里的配置文件copy到宿主机外面
后面是容器的门路 前面是宿主机的门路
docker cp 容器id:/etc/nginx/conf.d/default.conf /root/default.conf
容器id能够通过docker ps命令查看
复制进去之后,输出命令批改这个nginx配置
vim /root/default.conf
将Gunicorn配置加到外面
server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { proxy_pass http://你的服务器公网ip:5000; # 这里是指向 gunicorn host 的服务地址 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
批改完配置文件之后,关掉运行的nginx服务容器,并且删掉它
docker stop 容器id docker rm $(docker ps -a -q)
随后再次启动Nginx容器,不过这次和上次不同之处就是须要用到 -v 进行挂载了,挂载简略了解就是将宿主机的文件替换Docker容器外部的文件,达到批改的成果。
docker run --name mynginx -d -p 80:80 -v /root/default.conf:/etc/nginx/conf.d/default.conf nginx
这里-v参数也遵循冒号左侧为宿主机右侧为容器的准则。
重新启动胜利后,拜访服务器ip
发现曾经部署胜利,整个流程轻松加欢快,比原始的命令行shell装置不知快了多少倍,最初奉上Dockerhub地址:https://hub.docker.com/r/zcxe... 和 Flask工程地址:https://gitee.com/QiHanXiBei/...
原文转载自「刘悦的技术博客」 https://v3u.cn/a_id_165