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

多阶段构建实现 Docker 加速与体积减小:含文件查看、上传及拷贝功能的 FastAPI 应用镜像构建

本文围绕使用 Docker 构建 FastAPI 应用镜像展开,着重介绍了多阶段构建的 Dockerfile 编写及相关操作。借助多阶段构建,不仅实现了 Docker 构建的加速,还有效减小了镜像体积。

1. Dockerfile 内容

以下是我们要使用的 Dockerfile 内容:

# 第一个阶段 - 构建应用
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 镜像:

docker build -t fastapi-detect .
  • -t 参数用于给镜像指定一个名称和标签,这里将镜像命名为 fastapi-detect
  • . 表示使用当前目录下的 Dockerfile 进行构建。

3. 检查镜像是否构建成功

使用以下命令查看本地的 Docker 镜像列表:

docker images

确认 fastapi-detect 镜像是否在列表中。

4. 运行 Docker 容器

构建好镜像后,使用以下命令基于该镜像运行一个 Docker 容器:

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. 验证容器是否正常运行

使用以下命令查看正在运行的容器列表:

docker ps

若 fastapi-container 出现在列表中,并且状态为 Up,则表示容器已经成功启动并正在运行。

当你使用 docker start 启动已有的容器时,不需要再次设置端口映射,因为端口映射在容器创建时(使用 docker run 命令)就已经配置好了。下面详细解释不同场景下端口的处理方式:

5.1. 创建容器时设置端口映射

在创建 fastapi - container 容器时,你使用了 docker run -d -p 8899:8899 --name fastapi-container fastapi-detect 命令,其中 -p 8899:8899 就是设置端口映射,它将主机的 8899 端口映射到容器内部的 8899 端口。这一映射关系会被记录下来,后续使用该容器时都会沿用这个设置。

5.2. 停止和启动已有容器

当你停止和启动这个已经创建好的容器时,端口映射不会改变,也无需再次设置。

  • 启动容器
docker start fastapi-container
  • 停止容器
docker stop fastapi-container
    启动后,容器会继续使用之前创建时设置的端口映射,也就是主机的 8899 端口依旧映射到容器内部的 8899 端口。

    5.3. 修改端口映射

    如果你想修改端口映射,需要删除原有的容器,然后使用新的端口映射重新创建容器。

    使用 docker cp 命令将本地文件上传到容器中。

    # 停止容器
    docker stop fastapi-container# 删除容器
    docker rm fastapi-container# 使用新的端口映射(例如将主机的 9999 端口映射到容器的 8899 端口)重新创建容器
    docker run -d -p 9999:8899 --name fastapi-container fastapi-detect

    6. 访问 FastAPI 服务

    在容器成功运行后,你可以通过浏览器或工具(如 curl)访问主机的 8899 端口来验证 FastAPI 服务是否正常工作。例如,使用 curl 命令:

    curl http://localhost:8899

    如果服务正常,你应该能看到相应的响应信息。

    7. 停止和删除容器

    如果需要停止正在运行的容器,可以使用以下命令:

    docker stop fastapi-container

    若要删除已停止的容器,可使用:

    docker rm fastapi-container

    如果要删除镜像,可以使用:

    docker rmi fastapi-detect

    8. 将 Docker 镜像保存到本地

    8.1 保存镜像到本地文件

    构建好镜像之后,运用 docker save 命令将镜像保存为一个 .tar 文件:

    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 中:

    docker load -i fastapi-detect.tar
    • -i 选项用于指定输入文件的名称和路径,这里指定为 fastapi-detect.tar 文件。

    9. 查看项目文件

    9.1 查看

    当容器运行后,你可以进入容器内部查看项目文件。

    # 进入正在运行的容器
    docker exec -it fastapi-container /bin/bash# 在容器内部使用 ls 命令查看文件列表
    ls
    9.2 上传文件到容器

    使用 docker cp 命令将本地文件上传到容器中。

    # 将本地文件上传到容器的 /app 目录
    docker cp local_file.txt fastapi-container:/app/
    9.3 从容器拷贝文件到本地

    同样使用 docker cp 命令将容器内的文件拷贝到本地。

    # 将容器内的文件拷贝到本地当前目录
    docker cp fastapi-container:/app/file_in_container.txt .

    通过以上步骤,你就能轻松地基于给定的 Dockerfile 构建、运行 Docker 镜像,并将其保存到本地。希望本文对你有所帮助


    http://www.mrgr.cn/news/95635.html

    相关文章:

  • 【STM32】SPI通信外设硬件SPI读写W25Q64
  • Nginx请求头Hos头攻击
  • Ubuntu20.04安装并配置Pycharm2020.2.5
  • C++模板编程与元编程面试题及参考答案(精选100道题)
  • 车道保持中车道线识别
  • 圆弧插补相关算法汇总(C++和ST源代码)
  • 银河麒麟桌面版包管理器(四)
  • 银河麒麟桌面版包管理器(五)
  • 如何解决微服务调用链性能问题(优化 JVM 配置,降低 Full GC 频率)
  • 虚幻基础:UI
  • 论文阅读笔记:Denoising Diffusion Probabilistic Models (3)
  • 二叉树的学习
  • PowerShell 终端环境自动化配置
  • Ubuntu修改Swap交换空间大小
  • 长短期记忆网络:从理论到创新应用的深度剖析
  • java八股文之并发编程
  • springboot自定义工具
  • Pytest的Fixture使用
  • 施耐德 Unity Pro 项目配置
  • 综合章节:游戏网络化、模组化与深度扩展