利用python构建Dockerfile 文件

使用 Python 脚本来创建 Dockerfile 可以带来多方面的好处,尤其是当你需要自动化构建过程、管理复杂的构建步骤或者需要根据不同的环境条件生成不同的 Docker 镜像时。以下是使用 Python 创建 Dockerfile 的一些主要优点:
自动化和可重复性:
通过 Python 脚本,你可以自动化 Dockerfile 的生成过程,确保每次构建都是可重复的。这对于持续集成(CI)和持续部署(CD)流程尤为重要。
灵活性和可配置性:
Python 脚本可以根据不同的输入参数或环境变量动态生成 Dockerfile 内容。这意味着你可以为不同的目标平台或配置生成定制化的镜像。
错误检查和验证:
在 Python 脚本中,你可以添加逻辑来验证输入参数的有效性,检查依赖项是否存在,以及其他错误检查机制,从而减少人为错误。
复杂逻辑处理:
对于复杂的构建步骤,Python 脚本可以包含条件语句、循环、函数调用等,使得处理复杂的构建逻辑变得更加容易。
维护和管理:
将 Dockerfile 的生成逻辑封装在 Python 脚本中,使得代码更加易于维护和更新。当构建过程需要变更时,只需修改脚本即可。
集成其他工具:
Python 脚本可以与其他工具和库(如 Git、Docker API、CI/CD 系统等)集成,实现更高级的自动化功能。
版本控制:
通过将生成 Dockerfile 的 Python 脚本放在版本控制系统中,你可以跟踪构建逻辑的变更历史,并在团队中共享。
跨平台兼容性:
使用 Python 脚本生成 Dockerfile 可以在不同的操作系统和环境中工作,因为 Python 是跨平台的。
模板化和代码重用:
你可以编写通用的 Python 函数或类来生成 Dockerfile,这些代码可以用于多个项目,提高代码的重用性。
环境隔离:
在 Python 脚本中,你可以设置不同的环境变量或配置,以生成适用于不同环境(如开发、测试、生产)的 Docker 镜像。

总之,使用 Python 创建 Dockerfile 提供了一种强大、灵活且可维护的方式来管理 Docker 镜像的构建过程。这种方法特别适用于需要高度定制化和自动化的场景。

python 脚本如下:

import argparse
import osFLAGS = Nonedef install_new_version_of_TRT(clone_repo=False, trtllm_be_repo_tag="main"):df = """
# Remove prevous TRT installation
RUN apt-get remove --purge -y tensorrt* libnvinfer*
RUN pip uninstall -y tensorrt# Install new version of TRT using the script from TRT-LLM
RUN apt-get update && apt-get install -y --no-install-recommends python-is-python3
"""if clone_repo:df += """
# FIXME: Update the url
RUN git clone --single-branch --depth=1 -b {} https://github.com/triton-inference-server/tensorrtllm_backend.git
RUN cd tensorrtllm_backend && git submodule update --init --recursive
RUN cp tensorrtllm_backend/tensorrt_llm/docker/common/install_tensorrt.sh /tmp/
RUN rm -fr tensorrtllm_backend""".format(trtllm_be_repo_tag)else:df += """COPY tensorrt_llm/docker/common/install_tensorrt.sh /tmp/"""df += """
RUN bash /tmp/install_tensorrt.sh && rm /tmp/install_tensorrt.shENV LD_LIBRARY_PATH=/usr/local/tensorrt/lib/:$LD_LIBRARY_PATH
ENV TRT_ROOT=/usr/local/tensorrt"""return dfdef create_postbuild(repo_tag="main"):df = """
WORKDIR /workspace
"""df += install_new_version_of_TRT(clone_repo=True,trtllm_be_repo_tag=repo_tag)df += """
# Remove TRT contents that are not needed in runtime
RUN ARCH="$(uname -i)" && \rm -fr ${TRT_ROOT}/bin ${TRT_ROOT}/targets/${ARCH}-linux-gnu/bin ${TRT_ROOT}/data && \rm -fr  ${TRT_ROOT}/doc ${TRT_ROOT}/onnx_graphsurgeon ${TRT_ROOT}/python && \rm -fr ${TRT_ROOT}/samples  ${TRT_ROOT}/targets/${ARCH}-linux-gnu/samples# Uninstall unused nvidia packages
RUN if pip freeze | grep -q "nvidia.*"; then \pip freeze | grep "nvidia.*" | xargs pip uninstall -y; \fi
RUN pip cache purgeENV LD_LIBRARY_PATH=/usr/local/tensorrt/lib/:/opt/tritonserver/backends/tensorrtllm:$LD_LIBRARY_PATH
"""return dfdef dockerfile_for_linux():df = """
ARG BASE_IMAGE={}
""".format(FLAGS.trtllm_base_image)df += """
FROM ${BASE_IMAGE} as base
WORKDIR /workspaceRUN apt-get update && apt-get install python3-pip -y
COPY requirements.txt /tmp/
RUN pip3 install -r /tmp/requirements.txt --extra-index-url https://pypi.ngc.nvidia.com
"""df += install_new_version_of_TRT()df += """
FROM base as dev# CMake
RUN ARCH="$(uname -i)" && wget https://github.com/Kitware/CMake/releases/download/v3.27.6/cmake-3.27.6-linux-${ARCH}.sh
RUN bash cmake-3.27.6-linux-*.sh --prefix=/usr/local --exclude-subdir && rm cmake-3.27.6-linux-*.sh
ENV PATH="/usr/local/bin:${PATH}"COPY tensorrt_llm/requirements-dev.txt /tmp/
RUN pip install -r /tmp/requirements-dev.txt --extra-index-url https://pypi.ngc.nvidia.comFROM dev as trt_llm_builderWORKDIR /app
COPY scripts scripts
COPY tensorrt_llm tensorrt_llm
"""df += """
ARG TRTLLM_BUILD_CONFIG={}
""".format(FLAGS.trtllm_build_config)df += """
RUN cd tensorrt_llm && python3 scripts/build_wheel.py --build_type=${TRTLLM_BUILD_CONFIG} --trt_root="${TRT_ROOT}" -i --clean# Copy all artifacts needed by the backend to /opt/tensorrtllm
ARG TRTLLM_BUILD_LIB=tensorrt_llm/cpp/build/tensorrt_llm
RUN mkdir -p /opt/trtllm_lib && \cp ${TRTLLM_BUILD_LIB}/libtensorrt_llm.so /opt/trtllm_lib && \cp ${TRTLLM_BUILD_LIB}/thop/libth_common.so /opt/trtllm_lib && \cp ${TRTLLM_BUILD_LIB}/plugins/libnvinfer_plugin_tensorrt_llm.so \/opt/trtllm_lib && \cp ${TRTLLM_BUILD_LIB}/plugins/libnvinfer_plugin_tensorrt_llm.so.9 \/opt/trtllm_lib && \cp ${TRTLLM_BUILD_LIB}/plugins/libnvinfer_plugin_tensorrt_llm.so.9.1.0 \/opt/trtllm_lib
"""with open(FLAGS.output, "w") as dfile:dfile.write(df)if __name__ == "__main__":parser = argparse.ArgumentParser()parser.add_argument("--trtllm-base-image",type=str,required=True,help="Base image for building TRT-LLM.",)parser.add_argument("--trtllm-build-config",type=str,default="Release",choices=["Debug", "Release", "RelWithDebInfo"],help="TRT-LLM build configuration.",)parser.add_argument("--output",type=str,required=True,help="File to write Dockerfile to.")FLAGS = parser.parse_args()dockerfile_for_linux()

产生的dockerfile 文件

ARG BASE_IMAGE=nvcr.io/nvidia/tritonserver:23.10-py3-minFROM ${BASE_IMAGE} as base
WORKDIR /workspaceRUN apt-get update && apt-get install python3-pip -y
COPY requirements.txt /tmp/
RUN pip3 install -r /tmp/requirements.txt --extra-index-url https://pypi.ngc.nvidia.com# Remove prevous TRT installation
RUN apt-get remove --purge -y tensorrt* libnvinfer*
RUN pip uninstall -y tensorrt# Install new version of TRT using the script from TRT-LLM
RUN apt-get update && apt-get install -y --no-install-recommends python-is-python3COPY tensorrt_llm/docker/common/install_tensorrt.sh /tmp/RUN bash /tmp/install_tensorrt.sh && rm /tmp/install_tensorrt.shENV LD_LIBRARY_PATH=/usr/local/tensorrt/lib/:$LD_LIBRARY_PATH
ENV TRT_ROOT=/usr/local/tensorrtFROM base as dev# CMake
RUN ARCH="$(uname -i)" && wget https://github.com/Kitware/CMake/releases/download/v3.27.6/cmake-3.27.6-linux-${ARCH}.sh
RUN bash cmake-3.27.6-linux-*.sh --prefix=/usr/local --exclude-subdir && rm cmake-3.27.6-linux-*.sh
ENV PATH="/usr/local/bin:${PATH}"COPY tensorrt_llm/requirements-dev.txt /tmp/
RUN pip install -r /tmp/requirements-dev.txt --extra-index-url https://pypi.ngc.nvidia.comFROM dev as trt_llm_builderWORKDIR /app
COPY scripts scripts
COPY tensorrt_llm tensorrt_llmARG TRTLLM_BUILD_CONFIG=ReleaseRUN cd tensorrt_llm && python3 scripts/build_wheel.py --build_type=${TRTLLM_BUILD_CONFIG} --trt_root="${TRT_ROOT}" -i --clean# Copy all artifacts needed by the backend to /opt/tensorrtllm
ARG TRTLLM_BUILD_LIB=tensorrt_llm/cpp/build/tensorrt_llm
RUN mkdir -p /opt/trtllm_lib &&     cp ${TRTLLM_BUILD_LIB}/libtensorrt_llm.so /opt/trtllm_lib &&     cp ${TRTLLM_BUILD_LIB}/thop/libth_common.so /opt/trtllm_lib &&     cp ${TRTLLM_BUILD_LIB}/plugins/libnvinfer_plugin_tensorrt_llm.so         /opt/trtllm_lib &&     cp ${TRTLLM_BUILD_LIB}/plugins/libnvinfer_plugin_tensorrt_llm.so.9         /opt/trtllm_lib &&     cp ${TRTLLM_BUILD_LIB}/plugins/libnvinfer_plugin_tensorrt_llm.so.9.1.0         /opt/trtllm_lib

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯刷题 二分-[2145]求阶乘(C++)

问题描述 满足 N! 的末尾恰好有 K 个 0 的最小的 N 是多少? 如果这样的 N 不存在输出 −1。 输入格式 一个整数 K。 输出格式 一个整数代表答案。 样例输入 2 样例输出 10 评测用例规模与约定 对于 30% 的数据,1 ≤ K ≤ 10的6次方 对于 100% 的数据&…

【MATLAB 分类算法教程】_2粒子群算法优化支持向量机SVM分类 - 教程和对应MATLAB代码

分类代码案例2:粒子群算法优化支持向量机SVM分类 - MATLAB完全代码教程 1. 初始化代码2. 读取数据代码3.数据预处理代码4.利用粒子群算法PSO求解最佳的SVM参数c和g代码5.根据最佳的参数进行SVM模型训练代码6.SVM模型预测代码7.准确率分析以及分类结果对比作图代码本文以红酒数…

结合 tensorflow.js 、opencv.js 与 Ant Design 创建美观且高性能的人脸动捕组件并发布到InsCode

系列文章目录 如何在前端项目中使用opencv.js | opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js 如何从 public 路径加载人脸特征点检测模型tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图tensorflow.js 使用 opencv.js 将人脸…

lisp学习历程

学习Lisp是一项有趣且具有挑战性的过程,它是一种古老的编程语言,但在人工智能和函数式编程领域仍然有很高的影响力。下面是一个可能的Lisp学习历程: 了解Lisp的历史和基本概念: 了解Lisp的起源、发展历程和影响。理解Lisp的基本概…

uniapp:聊天消息列表(好友列表+私人单聊)支持App、H5、小程序

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 文章简介(效果图展示&#xff…

2024-04-10 Linux gzip 和 gunzip 命令,gzip 压缩的文件通常比原始文件小得多。

一、gzip 是 Linux 系统中用于压缩文件的命令,它通常用于将单个文件压缩成 .gz 格式的文件。gzip 压缩的文件通常比原始文件小得多,因此它在节省磁盘空间和减少文件传输时间方面非常有用。 gzip 命令的基本语法如下: gzip [选项] [文件]复制…

asp.net dropdownlist二级联动

asp.net dropdownlist二级联动 asp.net dropdownllist绑定数据库 怎么根据dropdownlist1选择的二级联动dropdownlist2 AutoPostBack"True"后 重新获取的dropdownlist1 为空了 在 ASP.NET 中使用 DropDownList 绑定数据库的步骤如下:创建一个 DropDownL…

Vue3学习01 Vue3核心语法

Vue3学习 1. Vue3新的特性 2. 创建Vue3工程2.1 基于 vue-cli 创建项目文件说明 2.2 基于 vite 创建具体操作项目文件说明 2.3 简单案例(vite) 3. Vue3核心语法3.1 OptionsAPI 与 CompositionAPIOptions API 弊端Composition API 优势 ⭐3.2 setup小案例setup返回值setup 与 Opt…

ssm038汽车养护管理系统+jsp

汽车养护管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本汽车养护管理系统就是在这样的大环境下诞生,其可以帮助管理者在短…

保姆级教程带你实现HarmonyOS手语猜一猜元服务(二)

由于文章篇幅较长,共分为了三篇发布: 保姆级教程带你实现HarmonyOS手语猜一猜元服务(一) 保姆级教程带你实现HarmonyOS手语猜一猜元服务(二) 保姆级教程带你实现HarmonyOS手语猜一猜元服务(三&…

微信小程序页面交互综合练习 (重点:解决“setData of undefined”报错问题)

一、写一个注册表单,点击“注册”按钮将用户输入的数据带到服务器,并且能在控制台显示参数。 (1)首先,我需要在vscode里面创建一个简易的node.js服务器 //第一步:引入http模块 var http require(http); //第二步:创建…

自动驾驶定位算法-粒子滤波(Particle Filter)

自动驾驶定位算法-粒子滤波(Particle Filter) 自动驾驶对定位的精度的要求在厘米级的,如何实现厘米级的高精度定位呢?一种众所周知的定位方法是利用全球定位系统(GPS),利用多颗卫星的测量结果,通过三角测量(Triangulation)机制确…

spring-cloud微服务openfeign

Spring Cloud openfeign对Feign进行了增强,使其支持Spring MVC注解,另外还整合了Ribbon和Nacos,从而使得Feign的使用更加方便 优势,openfeign可以做到使用HTTP请求远程服务时就像洞用本地方法一样的体验,开发者完全感…

自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南

文章目录 一、构建方法1、api/request.js2、api/requestHandler.js3、api/index.js 二、测试方法1、api/axios.js2、main.js3、app.vue4、vue.config.js5、index.html 三、打包1、配置package.json2、生成库包3、配置发布信息4、发布 四、使用1、安装2、使用 五、维护1、维护和…

M1 Flutter SDK的安装和环境配置

前言 作为iOS 开发,观望了许久的Flutter ,还是对它下手了,不是故意要卷,没办法工作需要!既然要学Flutter,首先就得配置Flutter的相关环境,由于我的是M1 芯片的电脑,记录下来配置过程…

spring boot 集成 flyway依赖 做数据库迁移,让部署没烦恼

flyway 是一个敏捷工具&#xff0c;用于数据库的移植。采用 Java 开发&#xff0c;支持所有兼容 JDBC 的数据库。 主要用于在你的应用版本不断升级的同时&#xff0c;升级你的数据库结构和里面的数据。 还是直接上代码 第一步&#xff1a; <!-- Flyway 数据库迁移 依赖 他…

TypeError: (0 , import_node_util.parseArgs) is not a function

报错 npm init vuelatest TypeError: (0 , import_node_util.parseArgs) is not a function 解决 Node切换到 18.0 或更高版本 使用nvm切换node版本 nvm list nvm use 20.12.0 npm init vuelatest

python爬虫-------JsonPath(第十九天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

【一学就会】(一)C++编译工具链——基于VSCode的CMake、make与g++简单理解与应用示例

目录 一、CMake、make与g 1、名词辨析 2、孰优孰劣 二、应用示例 1、工具类安装与配置 1&#xff09;VSCode安装与配置 2&#xff09;CMake下载与安装 3&#xff09;MinGW-W64下载与安装 A、科学上网法 B、无需科学上网法 4&#xff09;VSCode推荐插件 A、c/c编译环…

Linux/Ubuntu/Debian中与进程和系统资源有关的命令top/ps

top命令是Linux系统中非常实用的一个工具&#xff0c;其主要功能是展示当前系统中资源使用情况最高的进程列表。通过这个命令&#xff0c;我们可以一目了然地看到哪些进程正在消耗大量的CPU、内存等资源。top命令默认每3秒更新一次数据&#xff0c;提供了实时的系统资源状态&am…