pythondocker
『壹』 python教程:使用Docker打包Python應用
採用Docker來打包Python應用,相較於Python虛擬環境,其隔離性更高,但低於虛擬機。在選擇不同的隔離程度時,工程師需要綜合考慮以下因素。至於選用Python虛擬環境、Docker、虛擬機或其他打包方式,需工程師自行評估。
以下以一個最小應用為例,展示Docker打包的過程。本文的開發環境為Ubuntu 22.04,其他操作系統的步驟大致相同。
准備環境,即安裝Docker和相關工具。
安裝完成後,可以查看版本信息。
對於Docker引擎23.0之後的版本,還需要安裝一個buildx。這是因為從該版本開始,Docker構建鏡像的方式有所變化,但運行鏡像的語法不變。
運行一個hello-world容器,以驗證安裝是否成功。
如果拉取鏡像失敗,可能是網路無法訪問Docker Hub鏡像倉庫的問題,可以配置國內鏡像倉庫代理來解決,此處不詳細說明,假設問題已解決。
對於Python應用,需要py代碼文件和依賴描述文件requirements.txt。以一個單文件應用為例,代碼文件夾內容如下:
其中app.py是一個簡單的HTTP服務端應用:
requirements.txt中列出了該應用的依賴,因為本應用無外部依賴,所以該文件為空。
准備好應用後,先在本地進行測試,確保無誤後再進行打包。
新建一個鏡像構建文件Dockerfile,通常放在當前目錄,取名為Dockerfile。以下是一個Dockerfile的示例內容:
構建鏡像的過程可以理解為選擇一個基礎鏡像,進行相應改動,再保存下一個瞬時狀態,以確保每次啟動都能反映當時的狀態。上述內容包括:
使用以下命令行進行構建:
構建成功後,可以查看驗證一下:
可以看到該鏡像大小為400多MB,對於我們簡單的單文件應用來說還是比較大的。這是為了隔離度而付出的開銷。可以通過以下兩個思路來縮減鏡像尺寸:
將Dockerfile的內容修改如下,再次構建出兩個鏡像app2和app3:
Dockerfile for app2:
Dockerfile for app3:
再次查看一下:
可以看到當基礎鏡像為python:3.10-slim時,鏡像大小變成了135MB。還有一些更輕量級的基礎鏡像,讀者可以自行測試。
鏡像運行的實質是將鏡像實例化成容器,可以同步運行,也可以後台運行。
驗證完成後,該鏡像就可以發布,可以選擇發布到某個鏡像倉庫,也可以直接打包發布,本文暫不涉及。
{完}