本文围绕使用 Docker 构建 FastAPI 应用镜像展开,着重介绍了多阶段构建的 Dockerfile 编写及相关操作。借助多阶段构建,不仅实现了 Docker 构建的加速,还有效减小了镜像体积。
1. Dockerfile 内容
以下是我们要使用的 Dockerfile 内容:
bash
# 第一个阶段 - 构建应用
FROM docker.1ms.run/python:3.9 AS builder
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 安装依赖
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
# 复制项目文件到容器内
COPY . .
# 打包程序
RUN pyinstaller --onefile fastapi_detect.py
# 第二个阶段 - 最终镜像
FROM docker.1ms.run/python:3.9-slim
# 从构建阶段复制必要的文件
COPY --from=builder /app/dist/fastapi_detect /app/
# 从构建阶段复制 models 文件夹
COPY --from=builder /app/models /app/models
# 设置工作目录
WORKDIR /app
# 暴露端口
EXPOSE 8899
# 运行程序
CMD ["./fastapi_detect", "0.0.0.0", "8899"]
2. 构建 Docker 镜像
在 Dockerfile
所在的目录下,打开终端并执行以下命令来构建 Docker 镜像:
bash
docker build -t fastapi-detect .
-t
参数用于给镜像指定一个名称和标签,这里将镜像命名为fastapi-detect
。.
表示使用当前目录下的Dockerfile
进行构建。
3. 检查镜像是否构建成功
使用以下命令查看本地的 Docker 镜像列表:
bash
docker images
确认 fastapi-detect
镜像是否在列表中。
4. 运行 Docker 容器
构建好镜像后,使用以下命令基于该镜像运行一个 Docker 容器:
bash
docker run -d -p 8899:8899 --name fastapi-container fastapi-detect
-d
参数让容器以守护进程(后台)模式运行。-p 8899:8899
将容器的 8899 端口映射到主机的 8899 端口,这样你就可以通过主机的 8899 端口访问容器内运行的 FastAPI 应用。--name fastapi-container
为容器指定一个名称,方便后续管理和操作。fastapi-detect
是要使用的镜像名称。
5. 验证容器是否正常运行
使用以下命令查看正在运行的容器列表:
bash
docker ps
若 fastapi-container
出现在列表中,并且状态为 Up
,则表示容器已经成功启动并正在运行。
6. 访问 FastAPI 服务
在容器成功运行后,你可以通过浏览器或工具(如 curl
)访问主机的 8899
端口来验证 FastAPI 服务是否正常工作。例如,使用 curl
命令:
bash
curl http://localhost:8899
如果服务正常,你应该能看到相应的响应信息。
7. 停止和删除容器
如果需要停止正在运行的容器,可以使用以下命令:
bash
docker stop fastapi-container
若要删除已停止的容器,可使用:
bash
docker rm fastapi-container
如果要删除镜像,可以使用:
bash
docker rmi fastapi-detect
8. 将 Docker 镜像保存到本地
8.1 保存镜像到本地文件
构建好镜像之后,运用 docker save
命令将镜像保存为一个 .tar
文件:
bash
docker save -o fastapi-detect.tar fastapi-detect
-o
选项用于指定输出文件的名称和路径,这里将镜像保存为fastapi-detect.tar
文件。fastapi-detect
是要保存的镜像名称。
8.2 验证保存结果
你可以查看当前目录,确认 fastapi-detect.tar
文件是否存在。
8.3 后续使用(可选)
若之后需要在其他环境中使用这个镜像,可以使用 docker load
命令将 .tar
文件加载到 Docker 中:
bash
docker load -i fastapi-detect.tar
-i
选项用于指定输入文件的名称和路径,这里指定为fastapi-detect.tar
文件。
9. 查看项目文件
9.1 查看
当容器运行后,你可以进入容器内部查看项目文件。
bash
# 进入正在运行的容器
docker exec -it fastapi-container /bin/bash
# 在容器内部使用 ls 命令查看文件列表
ls
9.2 上传文件到容器
使用 docker cp
命令将本地文件上传到容器中。
bash
# 将本地文件上传到容器的 /app 目录
docker cp local_file.txt fastapi-container:/app/
9.3 从容器拷贝文件到本地
同样使用 docker cp
命令将容器内的文件拷贝到本地。
bash
# 将容器内的文件拷贝到本地当前目录
docker cp fastapi-container:/app/file_in_container.txt .
通过以上步骤,你就能轻松地基于给定的 Dockerfile 构建、运行 Docker 镜像,并将其保存到本地。希望本文对你有所帮助