以下是为 FastAPI 应用程序创建 Dockerfile 的详细步骤,用于构建 Docker 镜像并方便部署。
为 FastAPI 应用程序创建 Dockerfile 的步骤
1. 准备 FastAPI 应用程序
确保你的 FastAPI 应用程序结构合理。例如:
复制
my_fastapi_project/
│
├── app/
│ ├── main.py
│ ├── routers/
│ ├── models/
│ ├── schemas/
│ ├── crud/
│ ├── dependencies/
│ ├── config.py
│ ├── database.py
│ └── exceptions.py
│
├── requirements.txt
└── Dockerfile
2. 创建 requirements.txt
文件
确保在项目的根目录下有一个 requirements.txt
文件,列出所有 Python 依赖项。例如:
复制
fastapi
uvicorn
sqlalchemy
pydantic
...
3. 编写 Dockerfile
在项目的根目录下创建一个 Dockerfile
。以下是适用于 FastAPI 应用程序的示例 Dockerfile:
dockerfile
复制
# Step 1: 选择基础镜像
FROM python:3.10-slim
# Step 2: 设置容器内的工作目录
WORKDIR /app
# Step 3: 将 requirements 文件复制到容器中
COPY requirements.txt .
# Step 4: 安装依赖项
RUN pip install --no-cache-dir -r requirements.txt
# Step 5: 将应用程序代码复制到容器中
COPY . .
# Step 6: 暴露应用程序运行的端口
EXPOSE 8000
# Step 7: 定义运行应用程序的命令
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
Dockerfile 中每一步的说明
-
基础镜像
dockerfile复制
FROM python:3.10-slim
-
这一行指定了基础镜像。
python:3.10-slim
是一个轻量级的 Python 3.10 镜像。你可以根据需要选择其他版本的 Python。
-
-
设置工作目录
dockerfile复制
WORKDIR /app
-
这一行设置了容器内的工作目录为
/app
,后续的命令都会在这个目录下执行。
-
-
复制依赖文件
dockerfile复制
COPY requirements.txt .
-
这一行将本地的
requirements.txt
文件复制到容器的工作目录中。
-
-
安装依赖
dockerfile复制
RUN pip install --no-cache-dir -r requirements.txt
-
这一行安装了
requirements.txt
中列出的所有依赖项。--no-cache-dir
参数用于避免缓存,从而减小最终镜像的大小。
-
-
复制应用程序代码
dockerfile复制
COPY . .
-
这一行将本地项目目录中的所有内容复制到容器的工作目录中。
-
-
暴露端口
dockerfile复制
EXPOSE 8000
-
这一行暴露了容器的 8000 端口,这是 Uvicorn 默认用于运行 FastAPI 应用程序的端口。
-
-
定义运行命令
dockerfile复制
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
-
这一行指定了运行 FastAPI 应用程序的命令。
app.main:app
表示在app/main.py
文件中定义的 FastAPI 应用程序实例。
-
第 4 步:构建 Docker 镜像
在项目的根目录下(即 Dockerfile
所在位置),运行以下命令来构建 Docker 镜像:
bash
复制
docker build -t my-fastapi-app:latest .
-
my-fastapi-app:latest
是 Docker 镜像的名称和标签,你可以根据需要选择其他名称和标签。
第 5 步:运行 Docker 容器
构建完成后,使用以下命令运行 Docker 容器:
bash
复制
docker run -p 8000:8000 my-fastapi-app:latest
-
-p 8000:8000
将宿主机的 8000 端口映射到容器的 8000 端口,这样你就可以通过浏览器访问运行在http://localhost:8000
的 FastAPI 应用程序。
第 6 步:验证应用程序
在浏览器中打开 http://localhost:8000
,你应该能够看到 FastAPI 应用程序正在运行。
额外提示
-
环境变量:如果应用程序使用了环境变量,可以在运行容器时通过
bash-e
参数传递。例如:复制
docker run -p 8000:8000 -e DATABASE_URL=your_database_url my-fastapi-app:latest
-
Docker Compose:对于更复杂的场景(例如需要数据库服务),可以使用 Docker Compose 来管理多个容器。创建一个
docker-compose.yml
文件并定义你的服务。
通过以上步骤,你可以将 FastAPI 应用程序容器化,从而在不同环境中更方便地部署和运行。