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法线怎么存入正常贴图的过程&…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
