如何在Docker上部署Python Flask API應用程序

如果你是 Docker 和容器的新手,学习在 Docker 上部署 Python Flask API 应用程序是一个很好的开始。Docker 可以使用轻量级技术和安全性来容器化应用程序,实现快速部署。

在本教程中,你将学会如何在 Docker 容器上设置和部署 Python Flask API 应用程序。

准备好了吗?开始部署吧!

先决条件

如果你想一步步跟着进行,你需要安装以下软件:

  • 已安装 Docker 的 Ubuntu 机器。本教程使用的是 Ubuntu 18.04.5 LTS 版本,Docker 版本为 v19.03.8。
  • 已在 Ubuntu 机器上安装 Python v3.9 或更高版本。本教程将使用 Ubuntu 机器上的 Python v3.9.2。
  • 在用于测试本教程中的 Ubuntu 机器上安装 Elinks 包。

創建一個Python Flask API應用程序(GET和POST API)

首先創建一個Python Flask應用程序。Flask是一個輕量級的WSGI微Web應用程序框架,用Python編寫。Flask提供了方便的工具和功能,用於創建Python Web應用程序。

在創建Python Flask應用程序之前,您需要安裝Python Flask和Python虛擬環境,Flask將在其中運行應用程序。

1. 使用您喜歡的SSH客戶端登錄到Ubuntu機器。

2. 接下來,運行以下命令創建一個名為~/docker_python_flask_demo的目錄並切換到該目錄。該目錄將保存Python和Docker運行應用程序所需的所有文件。

mkdir ~/docker_python_flask_demo
cd ~/docker_python_flask_demo

3. 執行下面的pip命令install一個Flask所需的Python虛擬環境(virtualenv)。Python虛擬環境提供自己的Python二進制文件和每個應用程序安裝的包,以避免與其他應用程序發生衝突。

pip install virtualenv
Installing the environment needed by Flask to execute the applications

4. 執行下面的virtualenv 命令創建並激活虛擬環境使用venv模塊。

virtualenv venv
Creating the virtual environment for Python

5. 現在,運行以下命令使用pip包管理器安裝Python flask包。

pip install flask

6. 在開始安裝或使用套件之前,執行以下命令以啟用虛擬環境中的套件。這會修改 VIRTUAL_ENV 環境變數,指向您的虛擬環境,並在路徑前置虛擬環境的 Python 二進位檔,以便執行正確的二進位檔。

source venv/bin/activate

7. 創建一個名為 requirements.txt 的檔案,定義 Flask 應用程式的相依性,如下所示。

Flask==2.0.2

8. 創建一個文本檔 ~/docker_python_flask_demo/app.py,並使用以下 Python 代碼填充檔案。

以下的 Python 代碼導入 Python flask 類別並創建一個名為 app 的類別實例。 app 類別實例包含兩個在使用者在 /login 頁面發送請求時執行的 login() 函數。

然後執行 success() 函數,顯示歡迎訊息 “name-of-the-user” 在瀏覽器上。


from flask import Flask , redirect , url_for , request # 導入 flask 類別
# app 是 Flask 的物件或實例
app = Flask(__name__)
# app.route 通知 Flask 使用的 URL 由函數提供
@app.route('/success/<name>')
# 創建名為 success 的函數
def success(name):
    return 'welcome %s' % name

@app.route('/login', methods = ['GET','POST'])
# 創建名為 login 的函數
def login():
    if request.method == 'POST':
       user = request.form['adamlistek']
       return redirect(url_for('success', name = user)) 
    else:
       return "INVALID"
# 程序從這裡在開發伺服器上執行(在您的系統上本地執行)
# 啟用調試的情況下執行。
  
if __name__ == '__main__':
   app.run(debug = True)

9. 創建一個名稱為 ~/docker_python_flask_demo/form.html 的文件,並複製/粘貼下面的代碼。

運行下面的 HTML 代碼會創建一個帶有兩個輸入的表單; 一個是文本,用於提供您的名字,另一個是提交按鈕。

只要提供用戶名並點擊提交按鈕,就會發送一個 post 請求,Flask 運行另一個函數並在http://localhost:5000/success/<username>上打開一個新的網頁。

<html>
  <body>
    <form action="http://localhost:5000/login" method="post">
      <p>Please Enter your name</p>
      <p><input type="text" name="adamlistek" /></p>
      <p><input type="submit" value="Submit" /></p>
    </form>
  </body>
</html>

10. 最後,運行下面的 Python 命令來驗證應用程序(app.py)在本地系統上運行正常。

Python app.py

正如您在下面看到的,該應用程序在 Ubuntu 機器上成功運行,但在 Docker 上並非如此。您將在以下部分中啟動相同的應用程序在 Docker 上運行。

Running the Python application on the ubuntu machine.

創建一個 Dockerfile 以部署 Python Flask API 應用程序

您剛創建並驗證了 Python Flask 應用程序在本機上運行正常。但在將應用程序部署到 Docker 之前,您將首先創建一個Dockerfile,定義構建Docker image的所有指令。

~/docker_python_flask_demo目錄中創建一個名為 Dockerfile 的文件,並將下面的內容複製/粘貼到 Dockerfile 中。

Docker 將使用此 Dockerfile 執行所有必要的指令或命令,以在基礎映像(ubuntu:18.04)上構建新的 Docker 映像。

# 設置後續指令的基礎映像
FROM ubuntu:18.04
# 在容器中設置工作目錄  
WORKDIR /app
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev
# 將文件複製到工作目錄
COPY form.html /app/form.html
# 將依賴文件複製到工作目錄
COPY requirements.txt /app/requirements.txt
# 安裝依賴項
RUN pip install -r requirements.txt
# 將所有內容複製到工作目錄
COPY . /app
# 在容器啟動時運行的命令    
CMD [ "python" , "./app.py" ]

現在,運行下面的tree命令,以驗證在工作目錄中(~/docker_python_flask_demo)包含了運行 Python Flask 應用程序所需的所有文件。

tree  
Verifying all Required Files to Run the Flask Application Exist

為 Python Flask API 應用程序構建 Docker 映像

現在,您已經擁有部署 Python Flask 應用程序所需的文件,但除非構建映像,否則這些文件將無法執行任何操作。您將運行docker build命令,根據在 Dockerfile 中設置的指令構建基於這些指令的 Docker 映像。

執行以下命令以在工作目錄()中構建 Docker 映像。此命令將映像標記為版本 1(:v1)。

sudo docker build -t flask-image:v1 .
Building the Docker Image

現在,執行以下命令以列出所有可用的映像。

sudo docker images

下面,您可以看到返回的各種屬性,例如REPOSITORY。請注意REPOSITORY名稱為flask-image,並帶有版本標籤(v1),如下所示。

Verifying the New Docker Image (flask-image)

在 Docker 容器中運行 Python Flask 應用程序

創建 Docker 映像後,您現在可以在 Docker 容器中運行 Python 閃存應用程序。 Docker 容器將代碼及其依賴項打包起來,以快速運行應用程序。

1. 執行以下docker run命令執行以下操作:

  • 分離模式-d)啟動容器,使其作為後台進程運行並在創建時返回控制台輸出。
  • 將 Docker 主機端口(-p 5000:5000)映射到容器的端口。
  • 啟動 Docker 容器(flask-image:v1
sudo docker run -d -p 5000:5000 flask-image:v1

2. 接下來,執行下面的docker命令來列出 Docker 引擎中的所有容器。驗證 Docker 是否成功建立了容器。

sudo docker ps -a
Verifying the Docker container in the Docker engine

3. 最後,執行下面的命令在 Ubuntu 機器上使用 elinks 打開你的網頁瀏覽器。

elinks form.html

該命令在終端上打開網頁瀏覽器,並提示輸入名字,如下所示。

輸入你的名字並按下提交按鈕。

Accessing the login web page with the form to enter your name

4. 如你所見,按下提交按鈕後,登錄功能將重定向到 Flask 應用程序中的成功功能。

Displaying the welcome message in the web browser

結論

本教程旨在幫助你完成使用 Docker 鏡像設置 Python Flask API Docker 容器的過程。你也了解了如何使用 Dockerfile 啟動 Python Flask 容器,這使你能夠編輯和構建自定義容器。

那麼,你還有什麼其他應用程序計劃部署在 Docker 容器上?也許是一個 Docker MongoDB 容器?

Source:
https://adamtheautomator.com/python-flask-api/