返回部落格

使用 Docker 容器化 Python 應用程式

使用 Docker 容器化 Python 應用程式

Docker 是一個免費且開源的解決方案,用於在輕量級、作業系統級虛擬化中開發、部署和管理應用程式。在本指南中,我們將演示在 Docker 容器中建立一個 Python 應用程式。

先決條件

要執行本指南中演示的步驟,您將需要以下組件:

Docker 容器

在同一個環境中運行多個不同的程式時,事情可能會(而且一定會)出錯。您添加的程式越多,它就變得越不穩定。對於一般人來說這可能沒什麼大不了。然而,當涉及到關鍵任務應用程式時,可能會產生嚴重的後果。

系統中引入的應用程式越多,攻擊面就越大。單個受損的應用程式很容易導致整個系統的崩潰。

為了解決這些問題,我們可以使用 Docker 容器進行軟體級別的沙箱操作:

  • 容器內的應用程式對檔案的存取權限將受到限制。

  • 容器化的應用程式看不到系統中運行的其他程序。

  • 可以為容器分配特定數量的硬體資源。

  • 容器的網路連接埠不會暴露到外部。

  • 在本地/生產環境中對幾乎所有內容進行一致的打包。

為了進行演示,我們將在 Docker 容器中建立一個簡單的 Python 伺服器,將該容器轉換為映像檔,並在虛擬的生產環境中部署該映像檔。

步驟 1 – 檔案系統配置

要託管該專案,首先,我們將建立一個專用目錄:

在該目錄中,建立一個子目錄 src 以儲存我們的程式碼:

步驟 2 – 建立 Python 伺服器

在此步驟中,我們將用 Python 建立一個簡單的 HTTP 伺服器。建立檔案 server.py:

在文字編輯器中打開它:

from http.server import HTTPServer, SimpleHTTPRequestHandler def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler): """server entrypoint""" server_address = ("0.0.0.0", 8080) httpd = server_class(server_address, handler_class) print("starting server...") httpd.serve_forever() if __name__ == "__main__": run()

在這裡,

  • 我們正在使用 HTTPServer 類別,並從標準 Python 函式庫中請求一個處理常式,以保持程式簡單。

  • run 函式會初始化一個 HTTPserver.

  • 實例。正如 server_address 的引數所暗示,伺服器將監聽連接埠 8080 上的任何傳入連線。

現在,我們將驗證伺服器是否按預期運作。啟動伺服器:

在新的終端機中,我們可以使用 curl 向伺服器發送請求:

或者,您可以在網頁瀏覽器中存取該連結:

步驟 3 – 建立 Dockerfile

一個 Dockerfile  包含生成 Docker 映像檔所需的指令。檔案中的指令是按順序執行的。 深入了解 Dockerfile.

為我們的專案建立一個新的 Dockerfile

現在,我們將在其中引入必要的程式碼。在文字編輯器中打開它:

輸入以下程式碼:

這裡,

  • 任何 Dockerfile 必須以 開始FROM 指令。在我們的案例中,我們將 Python 宣告為 Docker 映像檔的基礎。

  • ENV SRC_DIR 指令指定了容器目錄的位置。

  • COPY 指令會複製來自 src 目錄的檔案,該目錄目前託管了 Python 伺服器。

  • 變數 PYTHONBUFFERED=1 指定 Python 將直接輸出和記錄日誌到 STDOUT。否則,日誌將不會被傳送到任何緩衝區。

  • CMD 指令指定了執行容器時要執行的預設指令。在此案例中,我們使用該指令來啟動我們的 Python 伺服器。

步驟 4 – 產生 Docker 映像檔

Dockerfile 準備就緒後,我們現在可以建置映像檔。執行以下 Docker 指令來開始此程序:

這裡,

  • -t 旗標用於將我們的 Docker 映像檔標記為 python_server.

  • Docker 將下載所有必要的元件並將它們合併為一個映像檔。

步驟 5 – 執行映像檔

映像檔已準備好進行部署。我們可以使用以下指令來執行它:

這裡,我們將本機機器的連接埠 8080 轉發到 Docker 映像檔,使用的是 -p 旗標。

我們可以輕鬆地使用 驗證伺服器是否已啟動並執行curl:

步驟 6 – 終止伺服器

在終端機中,按下 “Ctrl + C” 來終止 Docker 程序:

步驟 7 – 匯出與匯入 Docker 映像檔

我們現在有一個託管 Python 伺服器的功能性 Docker 映像檔。藉助 Docker 的匯出和匯入功能,我們可以將其遷移到任何其他系統。

首先,檢查目前系統中的 Docker 映像檔列表:

我們的目標是我們剛剛建立的 python_server Docker 映像檔。以下指令將其匯出為 TAR 封存檔:

python_server.tar 檔案傳輸到目標機器後,使用以下指令來匯入 Docker 映像檔:

結語

在本指南中,我們示範了如何從 Python 應用程式建置 Docker 映像檔。我們建立了一個簡單的 Python 網頁伺服器,並從中建置了一個 Docker 映像檔。該 Docker 映像檔現在可以部署在任何環境中,並預期獲得一致的行為。

有興趣了解更多關於 Docker 的資訊嗎?請參考以下指南:

祝您使用愉快!

author

Preslav Dobrev

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。