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

使用Docker構建Python FastAPI鏡像的最佳實踐

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

前言

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

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

基礎 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 .:利用層緩存,依賴不變時不會重復 pip install
  • –no-cache-dir:不保留 pip 緩存,減小鏡像體積。
  • CMD 用數(shù)組形式:避免通過 shell 解析,信號能正確傳到 uvicorn。

多階段構建減小體積

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

# 構建階段(可選:需要編譯時用)
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 的結果從 builder 拷到最終鏡像,避免把構建工具、臨時文件帶進去。若依賴全是 wheel,也可以不用 builder,只在最終階段裝依賴。

.dockerignore 減少上下文與層

在項目根目錄建 .dockerignore,避免把無關文件打進鏡像、拉長構建時間:

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

這樣 COPY . . 不會包含上述內容,鏡像更干凈,構建更快。

非 root 運行(可選但推薦)

在 Dockerfile 中新建用戶并用該用戶運行進程,降低容器內權限風險:

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"]

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

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

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

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

docker rundocker-compose.yml 中傳:

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

應用內用 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

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

總結

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

按上述方式構建的 FastAPI 鏡像更小、更安全、更利于 CI/CD 與生產部署。

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

相關文章

  • Docker容器操作方法詳解

    Docker容器操作方法詳解

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

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

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

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

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

    Docker如何進入啟動容器

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

乌兰县| 巴林左旗| 武夷山市| 木兰县| 清苑县| 延安市| 望城县| 台东市| 原平市| 兴城市| 长乐市| 孙吴县| 嵊泗县| 九台市| 育儿| 工布江达县| 平湖市| 桦川县| 平湖市| 周宁县| 南开区| 龙川县| 和龙市| 枣庄市| 凤冈县| 兴城市| 巴中市| 英吉沙县| 唐海县| 利川市| 潢川县| 恩施市| 正镶白旗| 永嘉县| 绥江县| 渭南市| 宁阳县| 泾源县| 莒南县| 灯塔市| 纳雍县|