关于docker:利用DockerHub在Centos77环境下部署Nginx反向代理GunicornFlask独立架构

30次阅读

共计 2626 个字符,预计需要花费 7 分钟才能阅读完成。

原文转载自「刘悦的技术博客」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

正文完
 0