利用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

相關文章
相關標籤/搜索