將Python項目打包成Docker鏡像的全過程
一、前言
在日常開發(fā)中,我們經(jīng)常需要部署 Python 應(yīng)用到服務(wù)器、測試環(huán)境或交付他人使用。傳統(tǒng)方式依賴本地環(huán)境配置,一旦換機器或多人協(xié)作,很容易出現(xiàn)“本地運行沒問題、遠(yuǎn)程報錯一堆”的情況。為了解決這種“環(huán)境地獄”問題,Docker 作為容器化技術(shù)的代表,能夠打包整個項目及其依賴,保證“在哪跑都一樣”。這篇文章將從零開始,記錄我如何將一個 Python 項目打包為 Docker 鏡像的全過程,適合有基本 Python 基礎(chǔ)但對 Docker 不熟悉的開發(fā)者參考。
二、項目簡介與結(jié)構(gòu)

三、創(chuàng)建requirements.txt
pip freeze > requirements.txt

使用上面命令可能會打包很不需要的包,簡潔一點打包方式
pip install pipreqs pipreqs . --encoding=utf8 --use-local
四、編寫 Dockerfile
# 使用官方 Python 基礎(chǔ)鏡像 FROM python:3.10-slim # 設(shè)置工作目錄 WORKDIR /app # 復(fù)制依賴文件并安裝 COPY requirements.txt . RUN pip install -r requirements.txt # 安裝依賴(官方源速度較慢,使用阿里源) RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # 復(fù)制項目代碼 COPY . . # 啟動程序 CMD ["python", "app.py"]
當(dāng)前我的項目的Dockerfile是這樣的
# 使用官方的 Python 3.9 slim 鏡像
FROM python:3.9-slim
# 設(shè)置工作目錄
WORKDIR /app
# 將當(dāng)前目錄的內(nèi)容復(fù)制到容器中
COPY asr_http_server.py /app/
COPY trans_utils.py /app/
COPY requirements.txt /app/
# 更新包管理器并安裝必要的系統(tǒng)依賴
RUN apt-get update && apt-get install -y \
ffmpeg \
libsndfile1 \
build-essential \
curl \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# 安裝 Python 依賴
RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 暴露 Flask 服務(wù)的端口
EXPOSE 7869
# 設(shè)置啟動命令
CMD ["python", "asr_http_server.py"]五、構(gòu)建 Docker 鏡像
docker build -t my-python-app .
構(gòu)建過程截圖

六、運行容器并訪問服務(wù)
docker run -d -p 5000:5000 my-python-app
若 app.py 使用 Flask,可在 127.0.0.1:5000 訪問服務(wù)。
七、遇到的問題與解決
這里記錄在構(gòu)建過程中遇到的坑,比如:
- pip 安裝失?。ňW(wǎng)絡(luò)問題 / 缺少 build 工具)
- 鏡像太大(優(yōu)化建議:alpine / 多階段構(gòu)建)
- 時區(qū)問題
- 文件沒復(fù)制進去 / 編碼問題
八、總結(jié)
本文從零開始,介紹了如何將 Python 項目打包成 Docker 鏡像,并記錄了構(gòu)建過程中的關(guān)鍵步驟與注意事項。希望能幫助你快速掌握 Python 項目的容器化部署思路。
以上就是將Python項目打包成Docker鏡像的全過程的詳細(xì)內(nèi)容,更多關(guān)于Python項目打包Docker鏡像的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在Pandas中DataFrame數(shù)據(jù)合并,連接(concat,merge,join)的實例
今天小編就為大家分享一篇在Pandas中DataFrame數(shù)據(jù)合并,連接(concat,merge,join)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
基于python中staticmethod和classmethod的區(qū)別(詳解)
下面小編就為大家?guī)硪黄趐ython中staticmethod和classmethod的區(qū)別(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
淺析Python如何在Word文檔中插入數(shù)學(xué)公式
將數(shù)學(xué)公式直接嵌入文檔中,不僅能夠提升文檔的專業(yè)水準(zhǔn),還能實現(xiàn)公式的自動更新和動態(tài)計算,從而有效提升工作效率和內(nèi)容的準(zhǔn)確性,下面我們就來看看如何使用 Python 在 Word 文檔中插入數(shù)學(xué)公式2025-06-06
python實戰(zhàn)scrapy操作cookie爬取博客涉及browsercookie
這篇文章主要為大家介紹了python實戰(zhàn)scrapy操作cookie爬取博客涉及browsercookie,下面來學(xué)習(xí)一下 scrapy 操作 Cookie來爬取博客吧2021-11-11
探索Python fcntl模塊文件鎖和文件控制的強大工具使用實例
這篇文章主要介紹了Python fcntl模塊文件鎖和文件控制的強大工具使用實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
從入門到生產(chǎn)詳解Python中FastAPI的全攻略
在 Python Web 開發(fā)領(lǐng)域,FastAPI 正以驚人的速度崛起,本文將從零開始,帶你全面掌握 FastAPI 的核心知識點,從環(huán)境搭建到生產(chǎn)部署,一次講清楚2026-05-05

