通過docker部署發(fā)布python項(xiàng)目的實(shí)戰(zhàn)步驟
將Python項(xiàng)目通過Docker部署發(fā)布,可以實(shí)現(xiàn)環(huán)境一致性、快速遷移和高效運(yùn)維。以下是實(shí)戰(zhàn)部署的完整步驟,結(jié)合最佳實(shí)踐整理而成:
一、項(xiàng)目準(zhǔn)備
1.確保本地項(xiàng)目可運(yùn)行
開發(fā)完成并本地測(cè)試通過(如 Flask/FastAPI 項(xiàng)目能正常訪問)。
項(xiàng)目結(jié)構(gòu)示例:
myproject/
├── app.py
├── requirements.txt
└── Dockerfile
2.生成依賴文件 requirements.txt
# 推薦使用 pipreqs(只導(dǎo)出項(xiàng)目實(shí)際依賴) pip install pipreqs pipreqs . --encoding=utf8 --force # 或使用 pip freeze(可能包含多余包) pip freeze > requirements.txt
二、編寫Dockerfile
在項(xiàng)目根目錄創(chuàng)建 Dockerfile,內(nèi)容如下(以 Flask 為例):
# 使用輕量級(jí)Python鏡像 FROM python:3.11-slim # 設(shè)置工作目錄 WORKDIR /app # 復(fù)制依賴文件 COPY requirements.txt . # 安裝依賴(使用國(guó)內(nèi)源加速) RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # 復(fù)制項(xiàng)目代碼 COPY . . # 暴露應(yīng)用端口(與代碼中保持一致) EXPOSE 5000 # 啟動(dòng)命令(推薦使用 gunicorn 生產(chǎn)部署) CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
說明:
- 使用
slim鏡像減少體積。 --no-cache-dir減少鏡像大小。- 可替換為
uvicorn(FastAPI)或其他啟動(dòng)器。
三、構(gòu)建 Docker 鏡像
# 構(gòu)建鏡像,指定名稱和標(biāo)簽 docker build -t my-python-app:v1.0 . # 查看鏡像是否生成 docker images | grep my-python-app
注意命令末尾的 . 表示上下文路徑。
四、運(yùn)行容器
# 啟動(dòng)容器,后臺(tái)運(yùn)行,端口映射 docker run -d -p 5000:5000 --name myapp my-python-app:v1.0 # 若需掛載配置或日志目錄 # docker run -d -p 5000:5000 -v ./logs:/app/logs --name myapp my-python-app:v1.0 # 查看運(yùn)行中的容器 docker ps
五、測(cè)試訪問
瀏覽器訪問:http://localhost:5000 或服務(wù)器IP地址。
查看日志:
docker logs myapp
六、優(yōu)化建議(進(jìn)階)
1.使用 .dockerignore 文件
__pycache__ *.pyc .git .env .idea
避免不必要的文件被打包進(jìn)鏡像。
2.多階段構(gòu)建(減小鏡像體積)
FROM python:3.11-slim as builder COPY requirements.txt . RUN pip install --user -r requirements.txt FROM python:3.11-slim COPY --from=builder /root/.local /root/.local COPY . . ENV PATH=/root/.local/bin:$PATH CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
3.使用 Docker Compose 管理多服務(wù)
創(chuàng)建 docker-compose.yml:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: example
啟動(dòng):
docker compose up --build
七、常用命令速查
| 功能 | 命令 |
|---|---|
| 查看鏡像 | docker images |
| 查看容器 | docker ps / docker ps -a |
| 刪除鏡像 | docker rmi 鏡像ID |
| 刪除容器 | docker rm 容器ID |
| 查看日志 | docker logs 容器名 |
| 進(jìn)入容器 | docker exec -it 容器名 /bin/bash |
總結(jié)
| 步驟 | 關(guān)鍵點(diǎn) |
|---|---|
| 1. 準(zhǔn)備項(xiàng)目 | 本地可運(yùn)行 + 生成 requirements.txt |
| 2. 編寫 Dockerfile | 基礎(chǔ)鏡像 + 依賴安裝 + 啟動(dòng)命令 |
| 3. 構(gòu)建鏡像 | docker build -t name:tag . |
| 4. 運(yùn)行容器 | docker run -d -p host:container --name |
| 5. 測(cè)試驗(yàn)證 | 訪問服務(wù) + 查看日志 |
通過以上步驟,即可完成一個(gè)標(biāo)準(zhǔn) Python 項(xiàng)目的 Docker 容器化部署,適用于開發(fā)、測(cè)試、生產(chǎn)等各類環(huán)境。
到此這篇關(guān)于通過docker部署發(fā)布python項(xiàng)目的實(shí)戰(zhàn)步驟的文章就介紹到這了,更多相關(guān)docker部署發(fā)布python項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker如何同時(shí)啟動(dòng)多個(gè)服務(wù)
這篇文章主要為大家詳細(xì)介紹了Docker如何同時(shí)啟動(dòng)多個(gè)服務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
docker-swarm之使用Docker secret管理敏感數(shù)據(jù)
就Docker Swarm集群服務(wù)而言,secret 是塊狀數(shù)據(jù),例如密碼、SSH私鑰、SSL證書或其他不應(yīng)通過網(wǎng)絡(luò)傳輸或未加密存儲(chǔ)在Dockerfile或應(yīng)用程序源代碼中的數(shù)據(jù),我們可以使用Docker secret 集中管理這些數(shù)據(jù),所以接下來就帶大家了解一下如何使用Docker secret 管理敏感數(shù)據(jù)2023-08-08
Docker根目錄遷移與滾動(dòng)日志設(shè)置方法
在使用docker的過程中,需要注意docker的根目錄磁盤位置,默認(rèn)情況下docker的日志是沒有限制的,所有,除了要修改根目錄位置到比較大的地方,還需要設(shè)置docker滾動(dòng)日志方式,這篇文章主要介紹了Docker根目錄遷移與滾動(dòng)日志設(shè)置方法,需要的朋友可以參考下2025-03-03
利用docker搭建LAMP運(yùn)行環(huán)境教程詳解
LAMP相信對(duì)大家來說都不陌生, Docker是一個(gè)開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器,所以這篇文章給大家介紹利用docker快速搭建LAMP運(yùn)行環(huán)境的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-10-10

