Docker 是一個免費且開放原始碼的解決方案,用於在輕量級、作業系統層級虛擬化中開發、部署和管理應用程式。在本指南中,我們將示範如何在 Docker 容器內建立 Python 應用程式。
先決條件
若要執行本指南示範的步驟,你需要以下元件:
一個 Linux 系統。請參考在 CloudSigma 上設定你自己的 Ubuntu VPS。
已安裝並設定最新版本的 Docker。深入了解在 Ubuntu 上安裝 Docker。
Docker 容器
在同一個環境中執行各種程式時,事情可能(而且將會)出錯。你新增的程式越多,環境就會變得越不穩定。對一般使用者而言,這可能不是什麼大問題。然而,若涉及任務關鍵型應用程式,後果可能會很嚴重。
系統中導入的應用程式越多,攻擊面就越大。單一遭入侵的應用程式很容易導致整個系統崩潰。
為了解決這些問題,我們可以使用 Docker 容器進行軟體層級的沙箱隔離:
容器內的應用程式只能有限度地存取檔案。
容器化應用程式無法看到系統中執行的其他行程。
可為容器分配特定數量的硬體資源。
容器的網路連接埠不會對外暴露。
幾乎任何內容都能在本機/正式環境之間維持一致的封裝。
為了示範,我們將在 Docker 容器內建置一個簡單的 Python 伺服器,將容器轉換為映像檔,並在一個模擬正式環境中部署該映像檔。
步驟 1 – 檔案系統設定
若要託管專案,首先我們將建立一個專用目錄:
mkdir -pv python-server-container/
cd !$
在該目錄中,建立一個子目錄 src 來存放我們的程式碼:
mkdir -pv src/

步驟 2 – 建置 Python 伺服器
在此步驟中,我們將以 Python 建立一個簡單的 HTTP 伺服器。建立檔案 server.py:
touch server.py
使用文字編輯器開啟它:
nano server.py

輸入以下 Python 程式碼:
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 監聽任何傳入連線。
現在,我們將驗證伺服器是否如預期運作。啟動伺服器:
python3 server.py
![]()
從新的終端機中,我們可以使用 curl 向伺服器送出請求:
curl -iv localhost:8080

或者,你也可以在網頁瀏覽器中存取該連結:
http://localhost:8080

步驟 3 – 建立 Dockerfile
Dockerfile 包含產生 Docker 映像檔所需的指令。檔案中的指令會依序執行。深入了解 Dockerfile。
為我們的專案建立新的 Dockerfile:
touch Dockerfile
現在,我們將在其中加入必要的程式碼。使用文字編輯器開啟它:
nano Dockerfile
輸入以下程式碼:
FROM python:latest
ENV SRC_DIR /usr/bin/src/test_server/src
COPY src/* ${SRC_DIR}/
WORKDIR ${SRC_DIR}
ENV PYTHONUNBUFFERED=1
CMD ["python", "server.py"]
在這裡:
任何
Dockerfile都必須以FROM指令開頭。在本例中,我們宣告以 Python 作為 Docker 映像檔的基礎。ENV SRC_DIR指令指定容器目錄的位置。COPY指令會從目前託管 Python 伺服器的src目錄複製檔案。變數
PYTHONBUFFERED=1指定 Python 會將輸出直接列印並記錄到STDOUT。否則,日誌不會被送到任何緩衝區。CMD指令指定執行容器時要執行的預設命令。在此案例中,我們使用此指令啟動 Python 伺服器。
步驟 4 – 產生 Docker 映像檔
Dockerfile 準備好後,我們現在可以製作映像檔。執行以下 Docker 命令以開始此流程:
docker build . -t python_server

在這裡:
-t旗標用於將我們的 Docker 映像檔標記為python_server。Docker 會下載所有必要元件,並將它們組合成一個映像檔。
步驟 5 – 執行映像檔
映像檔已準備好部署。我們可以使用以下命令執行它:
docker run -p 8080:8080 python_server

在這裡,我們使用 -p 旗標將本機電腦的連接埠 8080 轉送到 Docker 映像檔。
我們可以使用 curl 輕鬆驗證伺服器是否已啟動並正在執行:
curl -iv localhost:8080

步驟 6 – 終止伺服器
從終端機按下 “Ctrl + C” 以終止 Docker 行程:

步驟 7 – 匯出與匯入 Docker 映像檔
現在我們已有一個可運作的 Docker 映像檔,可託管我們的 Python 伺服器。透過 Docker 的匯出與匯入功能,我們可以將它遷移到任何其他系統。
首先,查看目前系統中的 Docker 映像檔清單:
docker images

我們的目標是剛建立的 python_server Docker 映像檔。以下命令會將它匯出為 TAR 封存檔:
docker save python_server:latest > python_server.tar

將 python_server.tar 檔案傳輸到目標機器後,使用以下命令匯入 Docker 映像檔:
docker load < python_server.tar

總結
在本指南中,我們示範了如何從 Python 應用程式建置 Docker 映像檔。我們建立了一個簡單的 Python 網頁伺服器,並由此建置出 Docker 映像檔。現在,該 Docker 映像檔可以部署到任何環境中,並預期具有一致的行為。
有興趣深入了解 Docker 嗎?請參考以下指南:
祝運算愉快!

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