利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构

原文转载自「刘悦的技术博客」v3u.cn/a_id_165html

上一篇文章:Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像,是在Win10简单玩了一下Docker的镜像打包,属实玩票,娱乐属性较高。要是想真刀真枪的在生产环境部署还得是Centos。linux

本次使用Nginx反向代理Flask服务,为何要加一层Nginx呢?由于Nginx能够直接处理静态文件请求而不用通过应用服务器,避免占用宝贵的运算资源,而且能够缓存静态资源,使访问静态资源的速度有效提升。同时它能够吸取一些瞬时的高并发请求,让Nginx先保持住链接(缓存http请求),而后后端慢慢消化掉这些并发。固然了,最重要的一点就是Nginx能够提供负载均衡策略,这样咱们的应用服务就能够横向扩展,分担压力了。nginx

大致架构以下:git

首先出场的是贵为Docker三大核心之一的DockerHub(仓库),咱们能够将打包好的镜像免费push到上面,就这样就能够随时pull本身的镜像,注册地址:hub.docker.com/github

激活帐号之后,建立仓库,这一步和github建立代码仓库差不太多。docker

填写仓库信息具体为仓库名称、描述以及是否公开或者私有。shell

建立成功以后,它就会出如今镜像列表中flask

此时咱们须要对本地的镜像重命名,这里重命名为zcxey2911/myflask。由于要与dockerhub上的仓库对应。若是名称不对应是没法将本地镜像push到线上仓库中。vim

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地址:hub.docker.com/r/zcxey2911… 和 Flask工程地址:gitee.com/QiHanXiBei/…

原文转载自「刘悦的技术博客」 v3u.cn/a_id_165

相关文章
相关标签/搜索