当前位置: 首页 > news >正文

Docker部署FastAPI实战

在现代 Web 开发领域,FastAPI 作为一款高性能的 Python 框架,正逐渐崭露头角,它凭借简洁的语法、快速的执行速度以及出色的类型提示功能,深受开发者的喜爱。而 Docker 容器化技术则为 FastAPI 应用的部署提供了便捷、高效且可移植的解决方案。本文将详细介绍如何使用 Docker 部署 FastAPI 应用的实战过程。

一、FastAPI 简介与项目准备

FastAPI 基于 Python 的类型提示构建,能够自动生成交互式文档,如 Swagger UI 和 ReDoc,这极大地方便了开发者进行 API 的开发与调试。在开始部署之前,首先需要创建一个简单的 FastAPI 项目。

假设我们已经安装好了 Python 和相应的虚拟环境管理工具(如 venvpipenv)。创建一个新的项目目录,例如 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&#xf…...

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 用于修改某些操作的默认行为&#xff0…...

w~视觉~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12538137 #SIF3D 通过两种创新的注意力机制——三元意图感知注意力(TIA)和场景语义一致性感知注意力(SCA)——来识别场景中的显著点云,并辅助运动轨迹和姿态的预测…...

IT服务团队建设与管理

在 IT 服务团队中,需要明确各种角色。例如系统管理员负责服务器和网络设备的维护与管理;软件工程师专注于软件的开发、测试和维护;运维工程师则保障系统的稳定运行,包括监控、故障排除等。通过清晰地定义每个角色的职责&#xff0…...

一文学习开源框架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 &#x1f…...

Unity图形学之法线贴图原理

1.正常贴图:RGBA 4通道 每个通道取值范围 0-255 贴图里面取值是 0-1 2.法线贴图:法线怎么存入正常贴图的过程 每个通道里面存储的是一个向量(x,y,z,w) 通常我们会对应xyzw为rgba 存储值的范围也是0-1向量的取值范围是 -1到1法线怎么存入正常贴图的过程&…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块&#xff0…...