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

二阶段 docker 构建

Dockerfile 构建

# 第一阶段:构建环境
FROM nvidia/cuda:12.2.0-runtime-ubuntu20.04 as builder# 设置清华源(系统级别)
RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list# 安装 Python 和基础工具
RUN apt-get update && apt-get install -y \python3 \python3-pip \python3-dev \build-essential \libgl1 \libglib2.0-0 \&& rm -rf /var/lib/apt/lists/*# 设置工作目录
WORKDIR /app# 复制requirements文件
COPY requirements.txt .# 设置pip清华源并安装所有依赖
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple \--no-warn-script-location \-r requirements.txt# 复制项目文件
COPY . .# 第二阶段:最小化生产镜像
FROM nvidia/cuda:12.2.0-runtime-ubuntu20.04# 设置清华源
RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list# 仅安装运行时需要的依赖
RUN apt-get update && apt-get install -y \python3 \python3-pip \libgl1 \libglib2.0-0 \&& rm -rf /var/lib/apt/lists/*# 设置工作目录
WORKDIR /app# 从构建阶段复制已安装的Python包
COPY --from=builder /usr/local/lib/python3.8/dist-packages /usr/local/lib/python3.8/dist-packages
COPY --from=builder /usr/local/bin /usr/local/bin# 从构建阶段复制项目文件
COPY --from=builder /app /app# 创建非root用户(安全最佳实践)
RUN groupadd -r appuser && useradd -r -g appuser appuser && \chown -R appuser:appuser /app
USER appuser# 设置环境变量
ENV PYTHONPATH=/app
ENV PYTHONUNBUFFERED=1# 暴露端口(如果需要)
# EXPOSE 8080 8081# 健康检查
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \CMD python -c "import torch; print('CUDA available:', torch.cuda.is_available())" || exit 1# 设置入口点
ENTRYPOINT ["python"]
CMD ["your_app.py"]

http://www.dtcms.com/a/389147.html

相关文章:

  • React原理二
  • 116.block design 设计中设置的DDR起始地址的作用是什么
  • 报名中|2025 Maple 用户大会
  • 深入解析Channel:数据流动的秘密通道
  • 一键快速发布服务
  • 栈-394.字符串解码-力扣(LeetCode)
  • 【数据库】视图与表的区别:深入理解数据库中的虚拟表
  • 保障货物安全:商贸物流软件的实时追踪与风险预警机制​
  • 第二部分:VTK核心类详解(第23章 vtkInteractor交互器类)
  • 【LeetCode】45. 跳跃游戏 II
  • 【C++进阶】C++11的新特性—右值引用和移动语义
  • AssemblyScript 入门教程(4)AssemblyScript 编译器选项与高级应用指南
  • rust编写web服务09-分页与搜索API
  • 时空预测论文分享:元学习 神经架构搜索 动态稀疏训练 提示未来快照
  • 新服务器安装宝塔,发布前后端分离项目
  • [科普] 零中频发射架构的本振泄露校准技术
  • Linux系统安全加固的8个关键步骤
  • Java--多线程知识(三)
  • Qt QVBarModelMapper详解
  • 【学习】通义DeepResearch之WebWalker-让大模型“深度潜水”网页信息
  • Bsin-PaaS:企业级开源RWA解决方案的技术革新与实践
  • 贪心算法应用:装箱问题(FFD问题)详解
  • GO项目开发规范文档解读
  • 声明式导航VS编程式导航
  • Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
  • 华硕主板Z790 Windows11 + Linux (Ubuntu22.04) 双系统安装
  • 第二部分:VTK核心类详解(第24章 vtkWidget控件类系统)
  • 贪心算法应用:在线租赁问题详解
  • 【Redis】缓存击穿的解决办法
  • 一款基于Java+Vue+Uniapp的全栈外卖系统