最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Docker構(gòu)建Python FastAPI鏡像的最佳實踐

 更新時間:2026年02月03日 08:26:22   作者:展菲  
本文分享了優(yōu)化Python FastAPI應(yīng)用Docker部署的關(guān)鍵技巧:使用slim基礎(chǔ)鏡像減小體積,通過多階段構(gòu)建分離編譯與運行環(huán)境,利用.dockerignore排除無關(guān)文件,推薦采用非root用戶運行增強安全性,需要的朋友可以參考下

前言

用 Docker 部署 Python FastAPI 應(yīng)用時,鏡像過大會拖慢拉取和部署,依賴或權(quán)限不當(dāng)又容易帶來安全與可維護性問題。通過多階段構(gòu)建、精簡基礎(chǔ)鏡像、非 root 運行等方式,可以在保證功能的前提下減小體積并提升安全性。

本文只講 Dockerfile 的關(guān)鍵寫法和注意點,不貼完整可運行項目。

基礎(chǔ) Dockerfile 示例

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .
EXPOSE 8000

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

要點:

  • python:3.11-slim:相比默認 python:3.11 體積小很多,一般已夠用;若依賴 C 庫,再考慮 slimalpine 的取舍。
  • WORKDIR /app:后續(xù) COPY、RUN 都在此目錄,便于路徑統(tǒng)一。
  • 先 COPY requirements.txt 再 COPY .:利用層緩存,依賴不變時不會重復(fù) pip install
  • –no-cache-dir:不保留 pip 緩存,減小鏡像體積。
  • CMD 用數(shù)組形式:避免通過 shell 解析,信號能正確傳到 uvicorn。

多階段構(gòu)建減小體積

若構(gòu)建階段需要編譯或額外工具,可用多階段:第一階段裝依賴、編譯,第二階段只保留運行時需要的文件。

# 構(gòu)建階段(可選:需要編譯時用)
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --user -r requirements.txt

# 運行階段
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

這里把 pip install --user 的結(jié)果從 builder 拷到最終鏡像,避免把構(gòu)建工具、臨時文件帶進去。若依賴全是 wheel,也可以不用 builder,只在最終階段裝依賴。

.dockerignore 減少上下文與層

在項目根目錄建 .dockerignore,避免把無關(guān)文件打進鏡像、拉長構(gòu)建時間:

__pycache__
*.pyc
.git
.venv
venv
.env
*.md
tests
.pytest_cache
.coverage
htmlcov

這樣 COPY . . 不會包含上述內(nèi)容,鏡像更干凈,構(gòu)建更快。

非 root 運行(可選但推薦)

在 Dockerfile 中新建用戶并用該用戶運行進程,降低容器內(nèi)權(quán)限風(fēng)險:

FROM python:3.11-slim

RUN groupadd -r app && useradd -r -g app app

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY --chown=app:app . .

USER app
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

注意:若應(yīng)用要寫當(dāng)前目錄(如日志、上傳),需保證 WORKDIRapp 可寫;掛載卷時也要注意宿主目錄權(quán)限。

環(huán)境變量與配置

敏感信息(如 DB 地址、密鑰)不要寫進鏡像,運行時通過環(huán)境變量或掛載注入:

ENV PYTHONUNBUFFERED=1
# 不在這里寫 DATABASE_URL、SECRET_KEY 等

docker rundocker-compose.yml 中傳:

environment:
  - DATABASE_URL=postgresql://...
  - SECRET_KEY=...

應(yīng)用內(nèi)用 os.getenv('DATABASE_URL') 或 pydantic Settings 讀取即可。

健康檢查

在 Dockerfile 或 compose 中加健康檢查,便于編排系統(tǒng)判斷容器是否就緒:

HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
  CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health')" || exit 1

前提是應(yīng)用提供 /health 等輕量接口;若沒有,可先用 curlwget 測根路徑,或暫時去掉 HEALTHCHECK。

總結(jié)

  • 基礎(chǔ)鏡像選 slim,先 COPY requirements 再 COPY 代碼,用 --no-cache-dir,CMD 用數(shù)組。
  • 需要時用多階段構(gòu)建和 .dockerignore 減小體積、加快構(gòu)建。
  • 推薦非 root 用戶運行,敏感配置用環(huán)境變量注入,按需加 HEALTHCHECK。

按上述方式構(gòu)建的 FastAPI 鏡像更小、更安全、更利于 CI/CD 與生產(chǎn)部署。

到此這篇關(guān)于使用Docker構(gòu)建Python FastAPI鏡像的最佳實踐的文章就介紹到這了,更多相關(guān)Docker構(gòu)建Python FastAPI鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker容器操作方法詳解

    Docker容器操作方法詳解

    Docker 在隔離的容器中運行進程。之前總結(jié)了Docker鏡像的使用詳解,本篇按照之前測試openGauss容器過程中總結(jié)出來使用Docker容器的常用命令
    2022-08-08
  • Docker實現(xiàn)進入容器內(nèi)部的方法

    Docker實現(xiàn)進入容器內(nèi)部的方法

    這篇文章主要介紹了Docker實現(xiàn)進入容器內(nèi)部的方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Docker中使用Redis配置文件的詳細指南

    Docker中使用Redis配置文件的詳細指南

    在現(xiàn)代軟件開發(fā)中,Redis 因其高性能和低延遲的特性,被廣泛用作數(shù)據(jù)結(jié)構(gòu)服務(wù)器和消息代理,Docker 作為一個輕量級的容器化平臺,使得部署和管理 Redis 變得更加簡單和高效,本文給大家介紹了Docker中使用Redis配置文件的詳細指南,需要的朋友可以參考下
    2024-11-11
  • Docker如何進入啟動容器

    Docker如何進入啟動容器

    本篇文章主要介紹了Docker如何進入啟動容器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 深入解析docker三種網(wǎng)絡(luò)模式

    深入解析docker三種網(wǎng)絡(luò)模式

    這篇文章主要介紹了docker三種網(wǎng)絡(luò)模式,分別是bridge橋接模式,host主機模式,none無網(wǎng)絡(luò)模式,每種模式給大家介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • Docker部署nginx并修改配置文件的實現(xiàn)方法

    Docker部署nginx并修改配置文件的實現(xiàn)方法

    這篇文章主要介紹了Docker部署nginx并修改配置文件的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Docker搭建Redis5.0并掛載數(shù)據(jù)

    Docker搭建Redis5.0并掛載數(shù)據(jù)

    本文主要介紹了Docker搭建Redis5.0并掛載數(shù)據(jù),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 使用遠程Docker進行集成測試的環(huán)境搭建過程

    使用遠程Docker進行集成測試的環(huán)境搭建過程

    使用docker可以幫助我們快速的搭建項目依賴環(huán)境,但是本地化的docker依賴,依然讓我們的代碼在測試時,不夠純粹,對其各個運行環(huán)境,都有本地docker安裝的要求
    2021-07-07
  • Docker搭建青龍面板教程(圖文)

    Docker搭建青龍面板教程(圖文)

    青龍面板是一款用于管理和運行腳本的Web界面,廣泛應(yīng)用于各類自動化腳本的管理,本文主要介紹了Docker搭建青龍面板教程,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Docker掛載的三種方法及使用場景分析

    Docker掛載的三種方法及使用場景分析

    在Docker容器中,持久化存儲和數(shù)據(jù)共享是非常重要的功能,Docker提供了三種主要的方法來實現(xiàn)宿主機和容器之間的數(shù)據(jù)掛載,本文將詳細介紹這三種方法的基本語法,并探討它們各自的使用場景,需要的朋友可以參考下
    2024-05-05

最新評論

辽阳县| 太保市| 荆州市| 皋兰县| 锡林郭勒盟| 荥经县| 山丹县| 崇礼县| 迭部县| 政和县| 滦平县| 图木舒克市| 冕宁县| 海门市| 即墨市| 保亭| 无为县| 永川市| 陇南市| 商丘市| 娄底市| 揭阳市| 台中市| 江口县| 垫江县| 内黄县| 红安县| 樟树市| 绍兴市| 黑山县| 基隆市| 民县| 泗阳县| 容城县| 木里| 上高县| 吉木乃县| 调兵山市| 达拉特旗| 白玉县| 晋宁县|