《FastAPI零基础入门与进阶实战》第27篇:构建 Docker 镜像
系列文章
《FastAPI零基础入门与进阶实战》
https://blog.csdn.net/sen_shan/category_12950843.html第26篇:Docker安装
https://blog.csdn.net/sen_shan/article/details/158388730?sharetype=blogdetail&sharerId=158388730&sharerefer=PC&sharesource=sen_shan&spm=1011.2480.3001.8118
文章目录
目录
前言
将从零开始,创建一个最简单的 FastAPI 应用,并将其打包成 Docker 镜像运行。
我们将完成以下步骤:
- 准备项目文件 (
main.py,requirements.txt,Dockerfile) - 构建 Docker 镜像
- 运行容器
- 测试访问
安装fastapi与 uvicorn
- pip install "fastapi[standard,orjson,pydantic-settings]"
- pip install uvicorn[standard]
创建项目
创建一个项目E:\uuiapp\python\Fastapi_to_Docker,新建文件main.py
from fastapi import FastAPI
# 创建应用实例
app = FastAPI()
# 定义一个根路径接口
@app.get("/")
def read_root():
return {"message": "Hello from FastAPI in Docker! 🚀"}
# 定义一个带参数的接口
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
依赖列表
告诉 Docker 需要安装哪些 Python 库。
pip freeze > requirements.txt
运行后,内容如下:
annotated-doc==0.0.4 annotated-types==0.7.0 anyio==4.12.1 click==8.3.1 colorama==0.4.6 fastapi==0.133.0 h11==0.16.0 httptools==0.7.1 idna==3.11 pydantic==2.12.5 pydantic_core==2.41.5 python-dotenv==1.2.1 PyYAML==6.0.3 starlette==0.52.1 typing-inspection==0.4.2 typing_extensions==4.15.0 uvicorn==0.41.0 watchfiles==1.1.1 websockets==16.0
构建指令
新建文件名:Dockerfile,告诉 Docker 如何打包这个应用。注意:文件名必须是 Dockerfile,没有后缀名。
# 1. 基于 Python 3.10 精简版镜像
FROM python:3.10-slim
# 2. 设置工作目录
WORKDIR /app
# 3. 设置环境变量 (防止日志缓冲和生成缓存文件)
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1
# 4. 复制依赖文件
COPY requirements.txt .
# 5. 安装依赖 (使用清华源加速,国内必备)
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 6. 复制项目所有代码到容器
COPY . .
# 7. 暴露端口
EXPOSE 8092
# 8. 启动命令 (监听 0.0.0.0 以便外部访问)
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8092"]
Docker 忽略文件
新建.dockerignore文件,用于指定构建时需要排除的文件。
# 忽略虚拟环境
venv/
.venv/
env/
# 忽略 Python 缓存
__pycache__/
*.pyc
*.pyo
*.pyd
# 忽略 Git 目录
.git/
# 忽略 IDE 配置
.vscode/
.idea/
# 忽略大型数据文件或日志 (根据实际情况调整)
*.log
data/
构建镜像
在powershell环境中运行构建命令:
docker build -t fastapi-e-project .
运行容器
在powershell环境中运行命令
注意端口映射在命令中的 -p 参数也要改成 8092:8092:
- 格式:
-p 宿主机端口:容器端口 - 这里两个都设为 8092。
docker run -d -p 8092:8092 --name my-fastapi-dev fastapi-e-project uvicorn main:app --host 0.0.0.0 --port 8092 --reload(注意:我在命令末尾也加上了
--port 8092,这是为了配合开发模式--reload直接覆盖 Dockerfile 的 CMD)
验证访问
- API 地址: http://localhost:8092
- 文档地址: http://localhost:8092/docs
💡 小贴士
如果你的 main.py 代码里写死了某些逻辑依赖 8000 端口(通常 FastAPI 不需要),请检查一下。一般情况下,只要 Dockerfile 和 docker run 命令里的端口一致,FastAPI 就能正常工作。
更多推荐
所有评论(0)