系列文章

《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与 uvicorn

创建项目

依赖列表

构建指令

Docker 忽略文件

构建镜像

运行容器

验证访问

💡 小贴士


前言

将从零开始,创建一个最简单的 FastAPI 应用,并将其打包成 Docker 镜像运行。

我们将完成以下步骤:

  1. 准备项目文件 (main.pyrequirements.txtDockerfile)
  2. 构建 Docker 镜像
  3. 运行容器
  4. 测试访问

安装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)

验证访问

💡 小贴士

如果你的 main.py 代码里写死了某些逻辑依赖 8000 端口(通常 FastAPI 不需要),请检查一下。一般情况下,只要 Dockerfile 和 docker run 命令里的端口一致,FastAPI 就能正常工作。

更多推荐