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

(未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件

如何编写一个用于构建python web项目镜像的dockerfile文件

一个用于构建python webdocker 镜像的文件需要包含以下文件:Dockerfilemain.pydocker-compose.ymlrequirements.txt。其中,main.py为python代码文件(命名不一定为main.py),docker-compose.yml 为非必须的文件,但是有了会更好,它整合了构建镜像的命令和创建容器的参数。

编写dockerfile,单阶段构建:

# Step 1: 选择基础镜像
FROM python:3.11-slim# Step 2: 设置容器内的工作目录
WORKDIR /app# Step3: 将 requirements 文件复制到容器中
COPY requiredments.txt .# Step4: 安装依赖项
RUN pip install --no-cache-dir -r requiredments.txt# Step5: 将应用程序代码复制到容器中
COPY ./app ./app# Step6: 声明应用程序运行的端口,这里仅仅是声明而不是实际暴露端口
EXPOSE 8000# Step7: 定义运行应用程序的命令
CMD ["uvicorn", "app.main:app","--host","0.0.0.0","--port","8000"]
  • python:3.11-slim 是一个轻量级python:3.11镜像。python:3.11-slim以Debian 官方 slim 变体(当前是 Debian Bookworm slim)作为基础镜像,再在上面安装 Python 3.11 及其最小依赖。

  • 8000是Uvicorn默认用于运行FastAPI应用程序的端口。

  • 拓展:

    RUN apt-get update && apt-get install -y --no-install-recommends \build-essential \&& rm -rf /var/lib/apt/lists/*
    

    RUN 是 Dockerfile 的关键字,它告诉 Docker:“在镜像构建阶段,启动一个临时容器,执行后面的 shell 命令;然后把执行后的文件系统改动固化成一层新的镜像层”。

多阶段构建:

# ----------- 构建阶段 -----------
FROM python:3.11-slim AS builder# 1. 安装编译依赖(后续可全部丢弃)
RUN apt-get update && apt-get install -y --no-install-recommends \build-essential \&& rm -rf /var/lib/apt/lists/*# 2. 创建并激活虚拟环境
ENV VIRTUAL_ENV=/opt/venv
RUN python -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"# 3. 安装 Python 依赖
WORKDIR /build
COPY requirements.txt .
RUN pip install --upgrade pip && \pip install --no-cache-dir -r requirements.txt# ----------- 运行阶段 -----------
FROM python:3.11-slim# 1. 复制虚拟环境(无编译器,体积更小)
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"# 2. 创建非 root 用户
RUN useradd -m -u 1001 appuser# 3. 复制源码
WORKDIR /app
COPY ./app ./app# 4. 权限 & 端口
RUN chown -R appuser:appuser /app
USER appuser
EXPOSE 8000# 5. 启动命令
# 默认监听 0.0.0.0:8000,workers 可根据 CPU 核数调整
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "1"]

如何编写 docker-compose.yml 文件

version: "3.8"
services:api:build: .ports:- "8000:8000"volumes:- ./app:/app/app  # 代码热挂载environment:- ENV=devcommand: >sh -c "uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload"

文章转载自:

http://3bxrbtQ2.fmznd.cn
http://7PkHw2mG.fmznd.cn
http://6MPn90Ip.fmznd.cn
http://Vwrav0TA.fmznd.cn
http://Gsf8Mp6H.fmznd.cn
http://SRofOBNF.fmznd.cn
http://BLvaB1zq.fmznd.cn
http://tUBJmGyE.fmznd.cn
http://qkHc9gYa.fmznd.cn
http://1vjvxFf5.fmznd.cn
http://iDKhC4EM.fmznd.cn
http://cWFFEPdk.fmznd.cn
http://IbFnLZq7.fmznd.cn
http://TxIavuIT.fmznd.cn
http://6Hf9Ft6D.fmznd.cn
http://r49xoOyY.fmznd.cn
http://vrPRVeGj.fmznd.cn
http://YOI3vyes.fmznd.cn
http://8c5rB41M.fmznd.cn
http://2uNrrPK7.fmznd.cn
http://84o3fLRd.fmznd.cn
http://Dxa4IZIt.fmznd.cn
http://hckigIXq.fmznd.cn
http://RzLBW8Wj.fmznd.cn
http://hGxXVqm5.fmznd.cn
http://2MMHbXnj.fmznd.cn
http://NjNCCs7l.fmznd.cn
http://VKofkZTK.fmznd.cn
http://uvLeJgZJ.fmznd.cn
http://fVPVMdFy.fmznd.cn
http://www.dtcms.com/a/368714.html

相关文章:

  • OpenResty 和 Nginx 到底有啥区别?你真的了解吗!
  • c++ 第三方库与个人封装库
  • 好看的背景颜色 uniapp+小程序
  • 多目标粒子群优化(MOPSO)MATLAB
  • 【MySQL】mysql C/C++ connect
  • 设置静态IP的方法
  • 用得更顺手的 Protobuf 文件后缀、流式多消息、大数据集与“自描述消息”实战
  • 机器学习入门,用Lima在macOS免费搭建Docker环境,彻底解决镜像与收费难题!
  • 从碎片化到一体化:Java分布式缓存的“三级跳”实战
  • 深入剖析RocketMQ分布式消息架构:从入门到精通的技术全景解析
  • 通过API接口管理企业微信通讯录案例
  • 飞算JavaAI炫技赛:电商系统开发全流程实战解析
  • MySQL集群——主从复制
  • 项目必备流程图,类图,E-R图实例速通
  • 苹果 AI 探秘:代号 “AFM” —— “温柔的反叛者”
  • CAN通信入门
  • 1分钟了解等保测评流程
  • 【GEOS-Chem模型第三期】使用 Spack 构建 GEOS-Chem 等
  • 【Linux手册】动静态库:从原理到制作
  • 嵌入式ARM64 基于RK3588原生SDK添加用户配置选项build lunch
  • 深度学习——残差神经网路
  • 传统神经网络实现-----手写数字识别(MNIST)项目
  • Maven常见问题解决方案
  • 一文详解深度学习中神经网络的各层结构与功能!
  • Java全栈开发工程师面试实录:从基础到实战的深度探讨
  • Unity打包Android应用常见问题解决指南
  • Snow Shot(截图工具) v0.2.6
  • LeNet-5:手写数字识别经典CNN
  • C++ opencv RTSP小工具 RTSP流播放、每一帧保存
  • android View详解—动画