Docker部署FastAPI实战
在现代 Web 开发领域,FastAPI 作为一款高性能的 Python 框架,正逐渐崭露头角,它凭借简洁的语法、快速的执行速度以及出色的类型提示功能,深受开发者的喜爱。而 Docker 容器化技术则为 FastAPI 应用的部署提供了便捷、高效且可移植的解决方案。本文将详细介绍如何使用 Docker 部署 FastAPI 应用的实战过程。
一、FastAPI 简介与项目准备
FastAPI 基于 Python 的类型提示构建,能够自动生成交互式文档,如 Swagger UI 和 ReDoc,这极大地方便了开发者进行 API 的开发与调试。在开始部署之前,首先需要创建一个简单的 FastAPI 项目。
假设我们已经安装好了 Python 和相应的虚拟环境管理工具(如 venv 或 pipenv)。创建一个新的项目目录,例如 fastapi-docker-project,在该目录下创建一个 main.py 文件作为 FastAPI 应用的入口点:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
这是一个非常基础的 FastAPI 应用,当访问根路径 / 时,会返回一个包含 "Hello, World!" 消息的 JSON 响应。
二、编写 Dockerfile
在项目目录下创建 Dockerfile,用于构建 Docker 镜像。以下是一个适用于 FastAPI 应用的 Dockerfile 示例:
# 使用官方的 Python 基础镜像,这里选择 Python 3.9
FROM python:3.9
# 设置工作目录
WORKDIR /app
# 将项目中的当前目录(.)下的所有文件复制到容器内的 /app 目录
COPY..
# 安装项目所需的依赖项
RUN pip install --no-cache-dir -r requirements.txt
# 暴露 FastAPI 应用运行的端口,这里假设应用运行在 8000 端口
EXPOSE 8000
# 定义容器启动时要执行的命令,启动 FastAPI 应用
CMD ["uvicorn", "main.py", "--host", "0.0.0.0", "--port", "8000"]
在上述 Dockerfile 中,首先选择了官方的 Python 3.9 镜像作为基础,然后设置工作目录为 /app,将项目文件复制到容器内,接着安装项目依赖项(假设项目有一个 requirements.txt 文件列出了依赖),最后暴露应用端口并指定启动命令。
三、构建 Docker 镜像
在包含 Dockerfile 的项目目录下,打开终端并执行以下命令构建 Docker 镜像:
docker build -t fastapi-app.
其中 -t 参数用于指定镜像的标签(tag),这里我们将镜像命名为 fastapi-app。构建过程可能需要一些时间,具体取决于项目的依赖项数量和网络速度。
四、运行 Docker 容器
镜像构建完成后,就可以运行 Docker 容器了:
docker run -d -p 80:8000 fastapi-app
上述命令中,-d 参数表示在后台运行容器,-p 参数用于将容器内的 8000 端口映射到宿主机的 80 端口。这样,我们就可以通过访问宿主机的 IP 地址或域名在浏览器中访问 FastAPI 应用了。例如,如果宿主机的 IP 地址是 192.168.1.100,那么在浏览器中输入 http://192.168.1.100 就可以看到 "Hello, World!" 的响应。
五、数据持久化(可选)
如果 FastAPI 应用需要处理数据并将其持久化存储,例如使用数据库,那么还需要考虑数据持久化的问题。在 Docker 中,可以使用数据卷(volume)来实现。
例如,如果应用使用 SQLite 数据库,并且数据库文件为 app.db,可以在运行容器时添加数据卷挂载:
docker run -d -p 80:8000 -v /data:/app/data fastapi-app
上述命令中,-v 参数表示挂载数据卷,将宿主机的 /data 目录挂载到容器内的 /app/data 目录,这样数据库文件就可以存储在宿主机的 /data 目录中,实现了数据的持久化,即使容器被删除或重新创建,数据也不会丢失。
六、容器网络配置(可选)
在一些复杂的部署场景中,可能需要对容器的网络进行配置。Docker 提供了多种网络模式,如默认的桥接网络(bridge)、主机网络(host)、覆盖网络(overlay)等。
如果需要让容器与其他容器或外部网络进行更灵活的通信,可以根据具体需求选择合适的网络模式并进行相应的配置。例如,如果有多个 FastAPI 应用容器需要相互通信,可以创建一个自定义的桥接网络,并将这些容器连接到该网络上。
七、容器监控与日志管理(可选)
为了确保 FastAPI 应用在容器中的稳定运行,还需要考虑容器的监控与日志管理。可以使用一些容器监控工具,如 Prometheus 和 Grafana 的组合,来收集容器的性能指标,如 CPU 使用率、内存占用等,并进行可视化展示。
对于日志管理,可以将容器内的日志输出到宿主机的文件系统或使用专门的日志管理系统,如 ELK 栈(Elasticsearch、Logstash、Kibana),以便更好地分析和排查问题。
通过以上步骤,我们成功地使用 Docker 部署了 FastAPI 应用。这种部署方式使得 FastAPI 应用能够在不同的环境中快速、一致地运行,提高了应用的可移植性和可维护性。同时,结合 Docker 的其他特性,如数据持久化、网络配置、监控与日志管理等,可以构建出更加健壮、灵活的生产环境部署方案,满足不同规模和复杂度的应用需求。
相关文章:
Docker部署FastAPI实战
在现代 Web 开发领域,FastAPI 作为一款高性能的 Python 框架,正逐渐崭露头角,它凭借简洁的语法、快速的执行速度以及出色的类型提示功能,深受开发者的喜爱。而 Docker 容器化技术则为 FastAPI 应用的部署提供了便捷、高效且可移植…...
【Python数据分析五十个小案例】电影评分分析:使用Pandas分析电影评分数据,探索评分的分布、热门电影、用户偏好
博客主页:小馒头学python 本文专栏: Python数据分析五十个小案例 专栏简介:分享五十个Python数据分析小案例 在现代电影行业中,数据分析已经成为提升用户体验和电影推荐的关键工具。通过分析电影评分数据,我们可以揭示出用户的…...
Vue2学习记录
前言 这篇笔记,是根据B站尚硅谷的Vue2网课学习整理的,用来学习的 如果有错误,还请大佬指正 Vue核心 Vue简介 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。 它基于标准 HTML、CSS 和 JavaScr…...
TMS FNC UI Pack 5.4.0 for Delphi 12
TMS FNC UI Pack是适用于 Delphi 和 C Builder 的多功能 UI 控件的综合集合,提供跨 VCL、FMX、LCL 和 TMS WEB Core 等平台的强大功能。这个统一的组件集包括基本工具,如网格、规划器、树视图、功能区和丰富的编辑器,确保兼容性和简化的开发。…...
Redis主从架构
Redis(Remote Dictionary Server)是一个开源的、高性能的键值对存储系统,广泛应用于缓存、消息队列、实时分析等场景。为了提高系统的可用性、可靠性和读写性能,Redis提供了主从复制(Master-Slave Replication…...
logback动态获取nacos配置
文章目录 前言一、整体思路二、使用bootstrap.yml三、增加环境变量四、pom文件五、logback-spring.xml更改总结 前言 主要是logback动态获取nacos的配置信息,结尾完整代码 项目springcloudnacosplumelog,使用的时候、特别是部署的时候,需要改环境&#…...
KETTLE安装部署V2.0
一、前置准备工作 JDK:下载JDK (1.8),安装并配置 JAVA_HOME 环境变量,并将其下的 bin 目录追加到 PATH 环境变量中。如果你的环境中已存在,可以跳过这步。KETTLE(8.2)压缩包:LHR提供关闭防火墙…...
[RabbitMQ] 保证消息可靠性的三大机制------消息确认,持久化,发送方确认
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
aws服务--机密数据存储AWS Secrets Manager(1)介绍和使用
一、介绍 1、简介 AWS Secrets Manager 是一个完全托管的服务,用于保护应用程序、服务和 IT 资源中的机密信息。它支持安全地存储、管理和访问应用程序所需的机密数据,比如数据库凭证、API 密钥、访问密钥等。通过 Secrets Manager,你可以轻松管理、轮换和访问这些机密信息…...
Java设计模式笔记(一)
Java设计模式笔记(一) (23种设计模式由于篇幅较大分为两篇展示) 一、设计模式介绍 1、设计模式的目的 让程序具有更好的: 代码重用性可读性可扩展性可靠性高内聚,低耦合 2、设计模式的七大原则 单一职…...
Unity3d C# 实现一个基于UGUI的自适应尺寸图片查看器(含源码)
前言 Unity3d实现的数字沙盘系统中,总有一些图片或者图片列表需要点击后弹窗显示大图,这个弹窗在不同尺寸分辨率的图片查看处理起来比较麻烦,所以,需要图片能够根据容器的大小自适应地进行缩放,兼容不太尺寸下的横竖图…...
【es6进阶】vue3中的数据劫持的最新实现方案的proxy的详解
vuejs中实现数据的劫持,v2中使用的是Object.defineProperty()来实现的,在大版本v3中彻底重写了这部分,使用了proxy这个数据代理的方式,来修复了v2中对数组和对象的劫持的遗留问题。 proxy是什么 Proxy 用于修改某些操作的默认行为࿰…...
w~视觉~3D~合集3
我自己的原文哦~ https://blog.51cto.com/whaosoft/12538137 #SIF3D 通过两种创新的注意力机制——三元意图感知注意力(TIA)和场景语义一致性感知注意力(SCA)——来识别场景中的显著点云,并辅助运动轨迹和姿态的预测…...
IT服务团队建设与管理
在 IT 服务团队中,需要明确各种角色。例如系统管理员负责服务器和网络设备的维护与管理;软件工程师专注于软件的开发、测试和维护;运维工程师则保障系统的稳定运行,包括监控、故障排除等。通过清晰地定义每个角色的职责࿰…...
一文学习开源框架OkHttp
OkHttp 是一个开源项目。它由 Square 开发并维护,是一个现代化、功能强大的网络请求库,主要用于与 RESTful API 交互或执行网络通信操作。它是 Android 和 Java 开发中非常流行的 HTTP 客户端,具有高效、可靠、可扩展的特点。 核心特点 高效…...
自研芯片逾十年,亚马逊云科技Graviton系列芯片全面成熟
在云厂商自研芯片的浪潮中,亚马逊云科技无疑是最早践行这一趋势的先驱。自其迈出自研芯片的第一步起,便如同一颗石子投入平静的湖面,激起了层层涟漪,引领着云服务和云上算力向着更高性能、更低成本的方向演进。 早在2012年&#x…...
Stable Diffusion 3 部署笔记
SD3下载地址:https://huggingface.co/stabilityai/stable-diffusion-3-medium/tree/main https://huggingface.co/spaces/stabilityai/stable-diffusion-3-medium comfyui 教程: 深度测评:SD3模型表现如何?实用教程助你玩转Stabl…...
微信小程序WXSS全局样式与局部样式的使用教程
微信小程序WXSS全局样式与局部样式的使用教程 引言 在微信小程序的开发中,样式的设计与实现是提升用户体验的关键部分。WXSS(WeiXin Style Sheets)作为微信小程序的样式表语言,不仅支持丰富的样式功能,还能通过全局样式与局部样式的灵活运用,帮助开发者构建美观且易于维…...
Docker 部署 MongoDB
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🍃 vue-uniapp-template 🌺 仓库主页: GitCode💫 Gitee …...
Unity图形学之法线贴图原理
1.正常贴图:RGBA 4通道 每个通道取值范围 0-255 贴图里面取值是 0-1 2.法线贴图:法线怎么存入正常贴图的过程 每个通道里面存储的是一个向量(x,y,z,w) 通常我们会对应xyzw为rgba 存储值的范围也是0-1向量的取值范围是 -1到1法线怎么存入正常贴图的过程&…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
