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

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

使用上面命令可能會(huì)打包很不需要的包,簡(jiǎn)潔一點(diǎn)打包方式
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ù)制項(xiàng)目代碼 COPY . . # 啟動(dòng)程序 CMD ["python", "app.py"]
當(dāng)前我的項(xià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è)置啟動(dòng)命令
CMD ["python", "asr_http_server.py"]五、構(gòu)建 Docker 鏡像
docker build -t my-python-app .
構(gòu)建過(guò)程截圖

六、運(yùn)行容器并訪問(wèn)服務(wù)
docker run -d -p 5000:5000 my-python-app
若 app.py 使用 Flask,可在 127.0.0.1:5000 訪問(wèn)服務(wù)。
七、遇到的問(wèn)題與解決
這里記錄在構(gòu)建過(guò)程中遇到的坑,比如:
- pip 安裝失?。ňW(wǎng)絡(luò)問(wèn)題 / 缺少 build 工具)
- 鏡像太大(優(yōu)化建議:alpine / 多階段構(gòu)建)
- 時(shí)區(qū)問(wèn)題
- 文件沒(méi)復(fù)制進(jìn)去 / 編碼問(wèn)題
八、總結(jié)
本文從零開(kāi)始,介紹了如何將 Python 項(xiàng)目打包成 Docker 鏡像,并記錄了構(gòu)建過(guò)程中的關(guān)鍵步驟與注意事項(xiàng)。希望能幫助你快速掌握 Python 項(xiàng)目的容器化部署思路。
以上就是將Python項(xiàng)目打包成Docker鏡像的全過(guò)程的詳細(xì)內(nèi)容,更多關(guān)于Python項(xiàng)目打包Docker鏡像的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于Pytorch的MLP模塊實(shí)現(xiàn)方式
今天小編就為大家分享一篇關(guān)于Pytorch的MLP模塊實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python confluent kafka客戶端配置kerberos認(rèn)證流程詳解
這篇文章主要介紹了Python confluent kafka客戶端配置kerberos認(rèn)證流程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
詳解Golang 與python中的字符串反轉(zhuǎn)
這篇文章主要介紹了詳解Golang 與python中的字符串反轉(zhuǎn)的相關(guān)資料,這里提供了實(shí)現(xiàn)的實(shí)例以便大家學(xué)習(xí)理解,需要的朋友可以參考下2017-07-07
Pandas庫(kù)之DataFrame使用的學(xué)習(xí)筆記
這篇文章主要介紹了Pandas庫(kù)之DataFrame使用的學(xué)習(xí)筆記,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
python opencv實(shí)現(xiàn)圖像邊緣檢測(cè)
這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)圖像邊緣檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
通過(guò)python將大量文件按修改時(shí)間分類的方法
今天小編就為大家分享一篇通過(guò)python將大量文件按修改時(shí)間分類的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
Django中URL視圖函數(shù)的一些高級(jí)概念介紹
這篇文章主要介紹了Django中URL視圖函數(shù)的一些高級(jí)概念,Django是Python重多人氣框架中最為著名的一個(gè),需要的朋友可以參考下2015-07-07
python用socket傳輸圖片的項(xiàng)目實(shí)踐
使用python在網(wǎng)絡(luò)上傳送圖片數(shù)據(jù),需要以byte格式讀取圖片,這樣才可以通過(guò)socket傳輸,本文就來(lái)介紹了python用socket傳輸圖片的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02

