亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

使用Docker開發python Web 應用

2024-09-01 13:48:42
字體:
來源:轉載
供稿:網友

本文中,我將嘗試展示用Docker開發python應用(主要是Web應用)的可行方法。雖然我本人專注于Python的Flask微框架,但本文目的是演示如何通過Docker更好地開發和共享應用程序,(由任何語言和框架開發的應用程序)。Docker通過封裝依賴項,大大減少了開發環境和正式產品的差距。

大多數Python開發人員在開發中使用virtualenv。它提供了一種易用的機制讓應用程序使用自己專用的依賴項,這些依賴項可能與在其它應用程序或操作系統存在沖突(尤其是不同的Pyhton版本,還有不同的庫版本等等)。個人而言,我對virtualenv一直沒有太大興趣,原因如下:

我經常忘記啟用它,或者在切換工程時忘記切換它,這會遇到含糊的出錯信息,另人倍感困惑。

它無法提供“純粹的”隔離,只能是Python級別的隔離(系統庫和非python的依賴項仍然會出問題)。

我通常不想在正式產品中運行它,這就意味著在開發環境和正式產品的不一致。

它讓人感覺有點“黑客”作法:它是依靠修改腳本和設置新路徑實現的。

( 查看 pythonrants的這篇文章 了解更多為什么你可能不想用virtualenv )

那么,怎么做Docker才能變得更好呢?Docker本質上提供了非常輕量化的VMs(在說法上可以稱為“容器”),我們可以使用其創建一個高標準隔離并能大大減少失配的開發和產品環境。(如果你不熟悉Docker,卻還想學習更多,你可以查看我在愛丁堡技術座談會上介紹Docker的談話)。

當我們建立一個小型的可視化Web APP,我自己和Mark Coleman使用這種方法(文檔在這)。這(里面)劃出了一個基本鏡像安裝Python 2.7,還有一些Flask管理以及PostgreSQL的內容。我會依據這個鏡像去開發一個hello world的Web應用。我假設你是在Linux上開發,并且你已經有git,還安裝了Docker,MacOS的指令應該非常類似。通過克隆和建立基本鏡像開始:

$ git clone https : //github.com/mrmrcoleman/python_webapp$ docker build – t python _ webapp .

現在,我們需要為容器中添加一些代碼并詳細寫明。我們打算新建一個僅僅指向Docker鏡像的項目來完成這項工作,而不是直接修改之前的項目。

創建一個具有下列結構的新項目:

├── Dockerfile├── example _ app│ ├── app│ │  ├── __init__ . py│ │  └── views . py│ └── __init__ . py├── example_app . wsgi

或者克隆該地址的示例項目: https://github.com/amouat/example_app.git

在example_app/app/_init_.py中寫入:

from flask import Flaskapp = Flask ( __name__ )from app import views

使另一個_init_.py為空。在views.py中寫入:

from app import app@ app . route ( ‘/' )@ app . route ( ‘/index' )def index () :return “Hello, World!”

以上就是我們的一個hello world應用的最小flask版本。我在 這個教程中也使用過類似的代碼,所以如果你剛剛接觸Flask或者Python,你可以根據上述提到的教程,使用Docker而不是virtualenv繼續學習。

為了使之運行在Docker容器內部,我們還需要做一些操作。在我們的實例Apache服務器中,example_app.wsgi文件包含了連接Python代碼和web服務器的指令。該文件應當包含下列內容:

import sitesite . addsitedir ( ‘/opt/example_app/' )from app import app as application

最終,我們需要一個Dockerfile來構建容器并運行容器。在我們的實例中,它看起來是這樣的:

FROM python_webappMAINTAINER amouatADD example_app . wsgi / var / www / flaskapp / flaskapp . wsgiCMD service apache2 start && tail – F / var / log / apache2 / error . log

ADD那行為啟動WSGI注入了一些代碼。CMD那行在啟動容器,啟動apache web服務器時獲取任何可能的錯誤信息,并將其發送至stdout。

如果你下列操作:

 

復制代碼 代碼如下:
$ docker build – t example _ app .
$ docker run – p 5000 : 5000 – v $( pwd ) / example_app :/ opt / example_app / – i – t example_app

 

你應當會得到這樣的回饋:通過瀏覽器打開地址localhost:5000,你會看到你的網站正在運行。如果你實在VM或者vagrant中運行,記得打開5000端口。

現在我們運行了web服務器,已經非常接近我們在產品中使用的東西了(我有意的使用Apache來做這點而不是Python默認的web服務器)。我們通過從主機向容器映射的方式向容器中注入代碼;也可以在Dockerfile命令行中是用ADD來添加代碼,但那樣的話當我們隊代碼進行改動時,每次都需要重新構建容器。

然而,這仍然不是很好 ;開發中我們真的希望使用很大程度上幫助我們調試的Python web服務器。該高興的是我們不用對Dockerfile進行任何修改。在example_app文件從創建一個run.py文件開始,按照一下內容:

! flask / bin / pythonfrom app import appapp . run ( debug = True , host = ‘0.0.0.0' )

這將啟動Python的帶調試的web服務器并監聽所有連接,我們也能從容器外訪問?,F在用下列命令重啟容器:

$ docker run -p 5000:5000 -v $(pwd)/example_app:/opt/example_app/ -i -t example_app python /opt/example_app/run.py

你能看到網頁又運行了。這次我們顯式地提供運行的命令(”python /opt/example_app/ryn.py”),它覆蓋了Dockerfile中的CMD行的設置?,F在如果編輯在主機上的源程序,就能馬上看到網頁上的改變。

讓我們花點時間看看我們的收獲:

一個運行在隔離容器中的web應用,容器完全封裝了應用的Python依賴項和系統依賴項。

能夠使用現有編輯器或IDE開發代碼并直接查看變化,就像在本地編輯一樣。

比以前更接近正式產品的運行環境。

沒有使用virtualenv。

如果你想知道如何以這種方式建立程序發布的途徑,可以看看Mark Coleman寫的關于前面提到的可視化Web應用的文章。

不幸的是,這一切還不完美。還有下列幾個問題:

你可能仍會遇到需要使用virtualenv或其等價解決方案的情況,例如庫的操作系統版本與你的程序所需版本間的沖突。

我們還沒完全解決數據托管的問題,仍需做某些測試。

我假設的“產品”是一個Docker容器,但實際情況常常并非如此而且Docker托管本身也剛剛起步。

盡管如此,我仍然認為這向軟件開發的更好未來邁了一大步,大大減輕了部署軟件和管理依賴項的痛苦。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品视频在线| www高清在线视频日韩欧美| 日韩av日韩在线观看| 精品久久久久久中文字幕一区奶水| 国产精品久久一区主播| 欧美激情视频网| 欧美亚洲国产视频| 亚洲一区美女视频在线观看免费| 久久理论片午夜琪琪电影网| 欧美视频在线观看 亚洲欧| 一区二区三区视频免费| 国产精品天天狠天天看| 欧美精品在线极品| 国产亚洲欧美一区| 亚洲精品久久久一区二区三区| 亚洲春色另类小说| 国产成人一区二区在线| 日韩一区二区三区在线播放| 亚洲免费视频观看| 国产玖玖精品视频| 亚洲天堂成人在线视频| 国产+成+人+亚洲欧洲| 欧美日韩免费观看中文| 国产欧美日韩精品丝袜高跟鞋| 国产丝袜一区二区三区| 久操成人在线视频| 精品久久久香蕉免费精品视频| 亚洲精品小视频在线观看| 国产精品亚洲片夜色在线| 日韩网站在线观看| 97超级碰碰碰久久久| 91国产在线精品| 国产精品海角社区在线观看| 亚洲aⅴ日韩av电影在线观看| 亚洲欧美日韩精品久久奇米色影视| 亚洲最大的av网站| 91久久久久久久一区二区| 成人黄色片网站| 91av在线影院| 91av在线播放视频| 9.1国产丝袜在线观看| 精品亚洲aⅴ在线观看| 91精品中文在线| 欧美精品免费在线观看| 国产精品久久久久久久久借妻| 欧美精品在线免费播放| 欧美极品少妇xxxxⅹ裸体艺术| 在线午夜精品自拍| 亚洲黄色av网站| 国产香蕉一区二区三区在线视频| 日韩精品视频在线| 国产69久久精品成人看| 亚洲欧美日韩在线一区| 欧美电影免费观看高清完整| 国产精品一区二区久久久久| 最近2019中文字幕第三页视频| 96sao精品视频在线观看| 国产精品视频一区二区高潮| 奇门遁甲1982国语版免费观看高清| 孩xxxx性bbbb欧美| 欧美日本在线视频中文字字幕| 久热在线中文字幕色999舞| 成人亚洲综合色就1024| 4438全国亚洲精品在线观看视频| 日韩在线观看你懂的| xxx一区二区| 久久影院免费观看| 精品福利一区二区| 久久电影一区二区| 精品中文字幕在线| 国产成人精品电影| 久久69精品久久久久久国产越南| 亚洲精品免费一区二区三区| 欧美人与性动交| 亚洲精品999| 国产精品1234| 国内久久久精品| 欧美精品制服第一页| www日韩中文字幕在线看| 亚洲情综合五月天| 成人av.网址在线网站| 欧美精品激情blacked18| 久久久久国产一区二区三区| 日韩有码在线观看| 日韩一区二区在线视频| 国产精品日韩欧美大师| 伊人久久综合97精品| 欧美极品欧美精品欧美视频| 亚洲一区999| 曰本色欧美视频在线| 国产丝袜一区二区| 亚洲精品一区中文| 日本精品免费一区二区三区| 国产性色av一区二区| 国产精品视频专区| 精品一区二区三区四区在线| 日本视频久久久| 亚洲最大中文字幕| 91精品国产乱码久久久久久久久| 日韩精品一区二区视频| 欧美午夜电影在线| 国产日韩欧美在线观看| 88xx成人精品| 亚洲黄色av女优在线观看| 日本中文字幕成人| 亚洲久久久久久久久久久| 国产欧美一区二区| 日韩精品免费在线视频| 欧美一级大片在线免费观看| 亚洲欧美综合区自拍另类| 日韩精品视频在线免费观看| 91精品国产亚洲| 久久久久久久国产精品| 欧美人在线观看| 久久久伊人日本| 欧美成人合集magnet| 国产精品美女av| 亚洲人成亚洲人成在线观看| 国产成人亚洲综合91| 日韩女优在线播放| 97视频人免费观看| 九九精品视频在线| 丝袜情趣国产精品| 国产一区二区三区中文| 在线播放国产一区中文字幕剧情欧美| 国产美女主播一区| 亚洲国产欧美一区| 亚洲奶大毛多的老太婆| 日韩**中文字幕毛片| 亚洲免费视频观看| 亚洲欧美精品伊人久久| 欧美性生交大片免费| 超碰91人人草人人干| 日韩美女av在线免费观看| 久久精品国产免费观看| 91伊人影院在线播放| 97视频在线免费观看| 欧美视频一区二区三区…| 久色乳综合思思在线视频| 成年人精品视频| 日本精品久久久| 欧美成人激情视频免费观看| 亚洲国产成人久久综合一区| 日韩在线观看成人| 欧美国产日韩在线| 久久亚洲电影天堂| 一本大道亚洲视频| 欧美大尺度激情区在线播放| 亚洲色无码播放| 成人免费xxxxx在线观看| 茄子视频成人在线| 美女视频黄免费的亚洲男人天堂| 精品久久国产精品| 97av在线视频免费播放| 欧美美最猛性xxxxxx| 91久久久亚洲精品| 日本国产一区二区三区| 亚洲伊人一本大道中文字幕| 国产成人鲁鲁免费视频a| 上原亚衣av一区二区三区| 亚洲国产精品人久久电影| 成人中心免费视频| 怡红院精品视频| 国产黑人绿帽在线第一区|