如何在Docker上執行Gunicorn?
在這篇文章中,我們將學習如何在Docker上執行Gunicorn。
在建立具有Gunicorn功能的Docker容器之前,我們必須瞭解一些關於Web伺服器和Gunicorn的基礎知識。
Gunicorn簡介
假設我們有一個Web伺服器,它向用戶顯示Python程式碼的輸出。這個Web伺服器每次收到請求時都會執行Python指令碼,這會導致它重啟、過載並延遲響應(對於大型指令碼來說延遲會非常大)。所以這裡我們遇到的真正問題是一個靜態伺服器,但我們需要一個動態的解決方案。Gunicorn就是上述問題的動態解決方案。
上圖解釋了問題陳述,下圖顯示瞭解決方案的結構。
有一個非常著名的基礎架構,它使用Nginx、Gunicorn和Django一起提供動態功能。Nginx解決負載均衡問題,Gunicorn解決靜態問題。
在Docker容器上部署
建立Django專案不在本文的討論範圍之內,我們可以建立一個最小化的應用程式並將該Python應用程式儲存在Docker容器中。這個Docker容器將安裝Gunicorn,我們將在容器上啟動Python應用程式。
演算法(步驟)
建立一個Python應用程式。
建立一個requirements檔案。
建立一個Dockerfile。
執行容器化。
檢查伺服器輸出。
步驟1:建立Python應用程式
建立一個簡單的Python應用程式物件,輸出“Hello Tutorialspoint!”
示例
def app(environ, start_response): data = b'Hello, Tutorialspoint!
' status = '200 OK' response_headers = [ ('Content-type', 'text/plain'), ('Content-Length', str(len(data))) ] start_response(status, response_headers) return iter([data])
將此檔案儲存為myapp.py。
步驟2:建立一個requirements檔案
python3 gunicorn
將此檔案儲存為requirements.txt。
步驟3:建立一個Dockerfile
這個Dockerfile將建立一個完全執行Python和Gunicorn的Docker容器映象。
將下面的檔案儲存為Dockerfile(無副檔名)。
示例
FROM python WORKDIR /app COPY ./myapp.py ./ COPY ./requirements.txt ./ RUN pip install --upgrade pip --no-cache-dir RUN pip install –r /app/requirements.txt --no-cache-dir CMD [“gunicorn”,”-w” “4”,”myapp:app”,”--bind” “0.0.0.0:8000”]
步驟4:從Dockerfile構建Docker映象
#docker build –t unicornimage .
步驟5:執行容器化
從unicornimage映象建立一個Docker容器。
示例
#docker run –itd --name unicorncontainer –p 8000:8000 unicornimage
步驟6:檢查伺服器是否可以在主機上訪問
轉到瀏覽器並搜尋localhost:8000以檢視輸出。
類似地,要建立一個Django專案,請在requirements.txt檔案中新增django和gunicorn,然後就可以開始了。