手把手教你將Flask應用封裝成Docker服務的實現
項目背景
在之前的一個項目中用Python的Flask寫了一個提供公共基礎服務的Rest應用,上面大佬的意思是需要將這一部分封裝成容器化服務,實現快速部署、管理以保證連續(xù)可用性。你知道如何將你的Flask項目部署到Docker中嗎?
大佬安排嘉賓席!不會的那咱們就接著往下看~
看完請記得點贊喲!點贊的人最可愛。偷偷告訴你們這段時間出于文章題材跟挑戰(zhàn)面試了一些公司,也收到了一些offer!Python領域崗(大部分爬蟲)。點贊過一百的話我整理之后開篇專場如何?說不定里面就有你下一次要采得大坑!而且公司說不定就有你在的或你正準備面的喲

1. 部署準備
- Flask:Python Web開發(fā)中最火的玄冥二老之一,它最大的特點就是輕量級
- Gunicorn:熟悉JAVA 或者 PHP 做開發(fā)的可能對 Python的應用部署還是有些懵的,Flask應用是一個符合WSGI規(guī)范的Python應用,不能單獨運行,需要依賴其他的組件提供服務器功能
- Gevent:Gunicorn 默認使用同步阻塞的網絡模型(-k sync),對于高并發(fā)的訪問并不太友好,所以我們需要使用gevent來提高并發(fā)量
- Dokcer:容器!你也可以把它理解為一個“盒子”。有時候我們會倦于管理項目的部署和維護。如果使用容器封裝項目,那么只需要維護一個配置文件完成部署需求,包括后續(xù)將整個部署的過程完全自動化,部署就會變得更便捷
來!這里簡單的畫一個圖來描述Flask應用被容器化服務的流程圖

2. 構建配置文件
假設我們有一個Flask應用,它的啟動文件里面內容是下面這樣的
如果你使用python命令運行去運行下面這個應用,打開你的瀏覽器輸入網址127.0.0.1:5000將會返回下面那句話
from flask import Flask
app = Flask(__name__)
@app.route('/')
def Project():
return '來了?老哥兒!給個關注&點贊不迷路喲'
if __name__ == '__main__':
app.run(debug=True)
但是這樣簡單的操作,只要你的小指頭摁一下 ctrl + c ,或者關掉你的終端,本次啟動的服務應用也就走到了盡頭,所以我們需要尋求更長久、穩(wěn)定的真正部署
首先在部署工作開展前請確保你的環(huán)境已經安裝Docker,然后在Flask項目下創(chuàng)建一個requirements.txt文件,為什么要創(chuàng)建它呢?因為它作為python項目常用到的一個文件,可以讓我們的項目中Python環(huán)境對依賴包的安裝

由于我的這臺云服務器Python環(huán)境是2.7,所以在安裝Gunicron的時候pip它默認會安裝最新版本>=3.4,所以2.7環(huán)境使用指定版本18.0
既然是真正的部署,你是否知道Flask應用它是一個符合WSGI規(guī)范的Python應用?它不能獨立運行(類似run的方式只適合開發(fā)模式),需要依賴其他組件提供服務器功能。所以上面依賴包選擇了Gunicorn+Gevent的超級組合,開始構建Gunicorn配置文件(下面workers的功能可以實際根據你的項目需求來定制化,我這邊內部使用的話完全是夠用的)

好了以后你可以使用Gunicorn提供的命令測試一下服務是否可以正確的運行,來人!搬命令
$ gunicorn app:app -c gunicorn.conf.py
如果你發(fā)現出現了錯誤,首先你可以根據它的異常信息提示進行修復(一般無非就是依賴包、環(huán)境、版本相關的一些問題)當然!你也可以來騷擾我
看到這我相信以上的基本操作對于你來講問題不是很大!那么我們現在需要做的就是需要創(chuàng)建一個Dokcerfile文件,以便構建你的Docker鏡像
FROM python:2.7 WORKDIR /usr/src/Project COPY requirements.txt ./ RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple COPY . . CMD ["gunicorn", "demo:app", "-c", "./gunicorn.conf.py"]
Dockerfile中的每一行都是一條命令
- FORM指定將在其中構建新鏡像的基礎容器鏡像。 這樣一來,你從一個現有的鏡像開始,添加或改變一些東西,并最終得到一個派生的鏡像【這里選擇的是python2.7)】
- WORKDIR設置將要安裝應用程序的默認目錄【當我在上面創(chuàng)建Project用戶時,會自動創(chuàng)建了一個主目錄,所以現在我將該目錄設置為默認目錄。 最后在Dockerfile中的任何剩余命令執(zhí)行以及運行容器時,其當前目錄都會為這個默認目錄】
- COPY將文件從你的機器復制到容器文件系統(tǒng)【它需要兩個或更多參數,源文件/目錄和目標文件/目錄。 源文件必須與Dockerfile所在的目錄相關, 目的地可以是絕對路徑】
- RUN執(zhí)行任意命令, 跟我們在shell下輸入命令相似【創(chuàng)建一個虛擬環(huán)境,然后在其中安裝requirements.txt文件中的所有Python依賴】
- CMD當然就是啟動Falsk服務,demo是我們項目啟動文件:啟動應用名變量app
3. 構建鏡像
完成以上基本操作后,就可以開始構建你的Docker鏡像了,以下使用docker build命令的-t參數設置了新容器鏡像的名稱和標簽。 那個點表示容器構建的基礎目錄,這就是Dockerfile所在的目錄。 構建過程將執(zhí)行Dockerfile中的所有命令并創(chuàng)建鏡像,該鏡像將存儲在你自己的機器上
docker build -t project:latest .
這個過程需要消耗一點時間,python:2的基礎鏡像它怎么說也有幾百個M,請給予它應有的尊重。這個時候你可以為即將到來的勝利泡上一杯苦口的coffee慶祝這美好的時刻。OK!coffee下肚精神爽,下面看看理想狀態(tài)下的效果它應該是以下這樣的

看來套路還是熟悉的味道,沒有帶給我們其它的煩惱,也并沒有出現其它異常的狀況。你可以使用docker images這條命令獲取本地鏡像的列表,啰!就是它
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE project latest 54a47d0c27cf 12 seconds ago 941MB
4. 構建Docker服務
最后你只差一步就能完成本次的部署工作,我相信這是個令你激動的時刻,請整理好你的思緒來使用Daemon的方式將你的Docker服務發(fā)布到生產環(huán)境中,來!上命令
$ docker run -d -p 5901:5901 --name FalskServer FlaskProject
你可以使用docker ps這條命令獲取當前容器列表,啰!就是下面這個圖,可以看到你的Flask應用已經部署到了Dcoker服務中運行,開心吧!還不趕緊測試一下你的成果

好的,到這里你已經掌握了如何將你的Flask應用封裝成一個Docker服務,所以在這個過程中我們不僅需要理解Flask應用的常規(guī)部署方法,更要掌握容器化部署應用的技巧。你看現在的容器技術多火爆,能不學習嗎?怎么滴也得學它一招半式喲。如果我們需要規(guī)模化的管理大量Dokcer容器時,可以考慮用K8s來做它將會簡化我們更多的工作
到此這篇關于手把手教你將Flask應用封裝成Docker服務的實現的文章就介紹到這了,更多相關Flask封裝成Docker服務內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python多線程編程threading模塊使用最佳實踐及常見問題解析
這篇文章主要為大家介紹了Python多線程編程threading模塊使用最佳實踐及常見問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
詳解python os.path.exists判斷文件或文件夾是否存在
這篇文章主要介紹了詳解python os.path.exists判斷文件或文件夾是否存在,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
Python高級編程之消息隊列(Queue)與進程池(Pool)實例詳解
這篇文章主要介紹了Python高級編程之消息隊列(Queue)與進程池(Pool),結合實例形式詳細分析了Python消息隊列與進程池的相關原理、使用技巧與操作注意事項,需要的朋友可以參考下2019-11-11
python+appium自動化測試之如何控制App的啟動和退出
本文主要介紹了python+appium自動化測試之如何控制App的啟動和退出,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
在Python中,不用while和for循環(huán)遍歷列表的實例
今天小編就為大家分享一篇在Python中,不用while和for循環(huán)遍歷列表的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02
解決pandas無法在pycharm中使用plot()方法顯示圖像的問題
今天小編就為大家分享一篇解決pandas無法在pycharm中使用plot()方法顯示圖像的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05

