欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

手把手教你將Flask應(yīng)用封裝成Docker服務(wù)的實(shí)現(xiàn)

 更新時(shí)間:2020年08月19日 09:14:45   作者:似繁星跌入夢(mèng)  
這篇文章主要介紹了手把手教你將Flask應(yīng)用封裝成Docker服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

項(xiàng)目背景

  在之前的一個(gè)項(xiàng)目中用Python的Flask寫了一個(gè)提供公共基礎(chǔ)服務(wù)的Rest應(yīng)用,上面大佬的意思是需要將這一部分封裝成容器化服務(wù),實(shí)現(xiàn)快速部署、管理以保證連續(xù)可用性。你知道如何將你的Flask項(xiàng)目部署到Docker中嗎?

大佬安排嘉賓席!不會(huì)的那咱們就接著往下看~

看完請(qǐng)記得點(diǎn)贊喲!點(diǎn)贊的人最可愛。偷偷告訴你們這段時(shí)間出于文章題材跟挑戰(zhàn)面試了一些公司,也收到了一些offer!Python領(lǐng)域崗(大部分爬蟲)。點(diǎn)贊過(guò)一百的話我整理之后開篇專場(chǎng)如何?說(shuō)不定里面就有你下一次要采得大坑!而且公司說(shuō)不定就有你在的或你正準(zhǔn)備面的喲

1. 部署準(zhǔn)備

  • Flask:Python Web開發(fā)中最火的玄冥二老之一,它最大的特點(diǎn)就是輕量級(jí)
  • Gunicorn:熟悉JAVA 或者 PHP 做開發(fā)的可能對(duì) Python的應(yīng)用部署還是有些懵的,F(xiàn)lask應(yīng)用是一個(gè)符合WSGI規(guī)范的Python應(yīng)用,不能單獨(dú)運(yùn)行,需要依賴其他的組件提供服務(wù)器功能
  • Gevent:Gunicorn 默認(rèn)使用同步阻塞的網(wǎng)絡(luò)模型(-k sync),對(duì)于高并發(fā)的訪問并不太友好,所以我們需要使用gevent來(lái)提高并發(fā)量
  • Dokcer:容器!你也可以把它理解為一個(gè)“盒子”。有時(shí)候我們會(huì)倦于管理項(xiàng)目的部署和維護(hù)。如果使用容器封裝項(xiàng)目,那么只需要維護(hù)一個(gè)配置文件完成部署需求,包括后續(xù)將整個(gè)部署的過(guò)程完全自動(dòng)化,部署就會(huì)變得更便捷

來(lái)!這里簡(jiǎn)單的畫一個(gè)圖來(lái)描述Flask應(yīng)用被容器化服務(wù)的流程圖

2. 構(gòu)建配置文件

假設(shè)我們有一個(gè)Flask應(yīng)用,它的啟動(dòng)文件里面內(nèi)容是下面這樣的

如果你使用python命令運(yùn)行去運(yùn)行下面這個(gè)應(yīng)用,打開你的瀏覽器輸入網(wǎng)址127.0.0.1:5000將會(huì)返回下面那句話

from flask import Flask

app = Flask(__name__)

@app.route('/')
def Project():
  return '來(lái)了?老哥兒!給個(gè)關(guān)注&點(diǎn)贊不迷路喲'

if __name__ == '__main__':
  app.run(debug=True)

但是這樣簡(jiǎn)單的操作,只要你的小指頭摁一下 ctrl + c ,或者關(guān)掉你的終端,本次啟動(dòng)的服務(wù)應(yīng)用也就走到了盡頭,所以我們需要尋求更長(zhǎng)久、穩(wěn)定的真正部署

  首先在部署工作開展前請(qǐng)確保你的環(huán)境已經(jīng)安裝Docker,然后在Flask項(xiàng)目下創(chuàng)建一個(gè)requirements.txt文件,為什么要?jiǎng)?chuàng)建它呢?因?yàn)樗鳛閜ython項(xiàng)目常用到的一個(gè)文件,可以讓我們的項(xiàng)目中Python環(huán)境對(duì)依賴包的安裝

由于我的這臺(tái)云服務(wù)器Python環(huán)境是2.7,所以在安裝Gunicron的時(shí)候pip它默認(rèn)會(huì)安裝最新版本>=3.4,所以2.7環(huán)境使用指定版本18.0

  既然是真正的部署,你是否知道Flask應(yīng)用它是一個(gè)符合WSGI規(guī)范的Python應(yīng)用?它不能獨(dú)立運(yùn)行(類似run的方式只適合開發(fā)模式),需要依賴其他組件提供服務(wù)器功能。所以上面依賴包選擇了Gunicorn+Gevent的超級(jí)組合,開始構(gòu)建Gunicorn配置文件(下面workers的功能可以實(shí)際根據(jù)你的項(xiàng)目需求來(lái)定制化,我這邊內(nèi)部使用的話完全是夠用的)


好了以后你可以使用Gunicorn提供的命令測(cè)試一下服務(wù)是否可以正確的運(yùn)行,來(lái)人!搬命令

$ gunicorn app:app -c gunicorn.conf.py

如果你發(fā)現(xiàn)出現(xiàn)了錯(cuò)誤,首先你可以根據(jù)它的異常信息提示進(jìn)行修復(fù)(一般無(wú)非就是依賴包、環(huán)境、版本相關(guān)的一些問題)當(dāng)然!你也可以來(lái)騷擾我

  看到這我相信以上的基本操作對(duì)于你來(lái)講問題不是很大!那么我們現(xiàn)在需要做的就是需要?jiǎng)?chuàng)建一個(gè)Dokcerfile文件,以便構(gòu)建你的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指定將在其中構(gòu)建新鏡像的基礎(chǔ)容器鏡像。 這樣一來(lái),你從一個(gè)現(xiàn)有的鏡像開始,添加或改變一些東西,并最終得到一個(gè)派生的鏡像【這里選擇的是python2.7)】
  • WORKDIR設(shè)置將要安裝應(yīng)用程序的默認(rèn)目錄【當(dāng)我在上面創(chuàng)建Project用戶時(shí),會(huì)自動(dòng)創(chuàng)建了一個(gè)主目錄,所以現(xiàn)在我將該目錄設(shè)置為默認(rèn)目錄。 最后在Dockerfile中的任何剩余命令執(zhí)行以及運(yùn)行容器時(shí),其當(dāng)前目錄都會(huì)為這個(gè)默認(rèn)目錄】
  • COPY將文件從你的機(jī)器復(fù)制到容器文件系統(tǒng)【它需要兩個(gè)或更多參數(shù),源文件/目錄和目標(biāo)文件/目錄。 源文件必須與Dockerfile所在的目錄相關(guān), 目的地可以是絕對(duì)路徑】
  • RUN執(zhí)行任意命令, 跟我們?cè)趕hell下輸入命令相似【創(chuàng)建一個(gè)虛擬環(huán)境,然后在其中安裝requirements.txt文件中的所有Python依賴】
  • CMD當(dāng)然就是啟動(dòng)Falsk服務(wù),demo是我們項(xiàng)目啟動(dòng)文件:啟動(dòng)應(yīng)用名變量app

3. 構(gòu)建鏡像

完成以上基本操作后,就可以開始構(gòu)建你的Docker鏡像了,以下使用docker build命令的-t參數(shù)設(shè)置了新容器鏡像的名稱和標(biāo)簽。 那個(gè)點(diǎn)表示容器構(gòu)建的基礎(chǔ)目錄,這就是Dockerfile所在的目錄。 構(gòu)建過(guò)程將執(zhí)行Dockerfile中的所有命令并創(chuàng)建鏡像,該鏡像將存儲(chǔ)在你自己的機(jī)器上

 docker build -t project:latest .

這個(gè)過(guò)程需要消耗一點(diǎn)時(shí)間,python:2的基礎(chǔ)鏡像它怎么說(shuō)也有幾百個(gè)M,請(qǐng)給予它應(yīng)有的尊重。這個(gè)時(shí)候你可以為即將到來(lái)的勝利泡上一杯苦口的coffee慶祝這美好的時(shí)刻。OK!coffee下肚精神爽,下面看看理想狀態(tài)下的效果它應(yīng)該是以下這樣的


看來(lái)套路還是熟悉的味道,沒有帶給我們其它的煩惱,也并沒有出現(xiàn)其它異常的狀況。你可以使用docker images這條命令獲取本地鏡像的列表,啰!就是它

$ docker images
REPOSITORY TAG   IMAGE ID   CREATED    SIZE
project  latest 54a47d0c27cf 12 seconds ago 941MB

4. 構(gòu)建Docker服務(wù)

最后你只差一步就能完成本次的部署工作,我相信這是個(gè)令你激動(dòng)的時(shí)刻,請(qǐng)整理好你的思緒來(lái)使用Daemon的方式將你的Docker服務(wù)發(fā)布到生產(chǎn)環(huán)境中,來(lái)!上命令

$ docker run -d -p 5901:5901 --name FalskServer FlaskProject

你可以使用docker ps這條命令獲取當(dāng)前容器列表,啰!就是下面這個(gè)圖,可以看到你的Flask應(yīng)用已經(jīng)部署到了Dcoker服務(wù)中運(yùn)行,開心吧!還不趕緊測(cè)試一下你的成果


好的,到這里你已經(jīng)掌握了如何將你的Flask應(yīng)用封裝成一個(gè)Docker服務(wù),所以在這個(gè)過(guò)程中我們不僅需要理解Flask應(yīng)用的常規(guī)部署方法,更要掌握容器化部署應(yīng)用的技巧。你看現(xiàn)在的容器技術(shù)多火爆,能不學(xué)習(xí)嗎?怎么滴也得學(xué)它一招半式喲。如果我們需要規(guī)?;墓芾泶罅緿okcer容器時(shí),可以考慮用K8s來(lái)做它將會(huì)簡(jiǎn)化我們更多的工作

到此這篇關(guān)于手把手教你將Flask應(yīng)用封裝成Docker服務(wù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Flask封裝成Docker服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python抓取移動(dòng)App數(shù)據(jù)使用mitmweb監(jiān)聽請(qǐng)求與響應(yīng)

    Python抓取移動(dòng)App數(shù)據(jù)使用mitmweb監(jiān)聽請(qǐng)求與響應(yīng)

    這篇文章主要介紹了Python抓取移動(dòng)App數(shù)據(jù)使用mitmweb監(jiān)聽請(qǐng)求與響應(yīng),mitmproxy控制臺(tái)方式、mitmdump與Python對(duì)接的方式、mitmweb可視化方式,需要的朋友可以參考一下
    2022-01-01
  • 使用Python操作文件系統(tǒng)的方法

    使用Python操作文件系統(tǒng)的方法

    Python提供了許多內(nèi)置庫(kù)來(lái)處理文件系統(tǒng),如os、shutil和pathlib等,這些庫(kù)可以幫助你創(chuàng)建、刪除、讀取、寫入文件和目錄,這篇文章主要介紹了使用Python操作文件系統(tǒng),需要的朋友可以參考下
    2023-07-07
  • Python 記錄日志的靈活性和可配置性介紹

    Python 記錄日志的靈活性和可配置性介紹

    這篇文章給大家介紹了關(guān)于日志記錄庫(kù)的靈活性和可配置性,目的在于證明它如何設(shè)計(jì)的,對(duì)python 日志記錄相關(guān)知識(shí)感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-02-02
  • linux centos 7.x 安裝 python3.x 替換 python2.x的過(guò)程解析

    linux centos 7.x 安裝 python3.x 替換 python2.x的過(guò)程解析

    這篇文章主要介紹了linux centos 7.x 安裝 python3.x 替換 python2.x的過(guò)程解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Python實(shí)現(xiàn)檢測(cè)服務(wù)器是否可以ping通的2種方法

    Python實(shí)現(xiàn)檢測(cè)服務(wù)器是否可以ping通的2種方法

    這篇文章主要介紹了Python實(shí)現(xiàn)檢測(cè)服務(wù)器是否可以ping通的2種方法,本文分別講解了使用ping和fping命令檢測(cè)服務(wù)器是否可以ping通,需要的朋友可以參考下
    2015-01-01
  • python如何實(shí)現(xiàn)全角半角的相互轉(zhuǎn)換

    python如何實(shí)現(xiàn)全角半角的相互轉(zhuǎn)換

    這篇文章主要介紹了python如何實(shí)現(xiàn)全角半角的相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • PyQt5之如何設(shè)置QWidget窗口背景圖片問題

    PyQt5之如何設(shè)置QWidget窗口背景圖片問題

    這篇文章主要介紹了PyQt5之如何設(shè)置QWidget窗口背景圖片問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python實(shí)現(xiàn)周期方波信號(hào)頻譜圖

    python實(shí)現(xiàn)周期方波信號(hào)頻譜圖

    這篇文章主要介紹了python 周期方波信號(hào)頻譜圖,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python編程的核心知識(shí)點(diǎn)總結(jié)

    python編程的核心知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python編程的核心知識(shí)點(diǎn)總結(jié)內(nèi)容,對(duì)此有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-02-02
  • Python中繪制折線圖的全面指南(非常詳細(xì)!)

    Python中繪制折線圖的全面指南(非常詳細(xì)!)

    對(duì)于數(shù)據(jù)而言一般都會(huì)使用折線圖反映數(shù)據(jù)背后的趨勢(shì),下面這篇文章主要給大家介紹了關(guān)于Python中繪制折線的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08

最新評(píng)論