手动创建Docker版Fastapi CI/CD镜像文件 📅 发布时间:2026/7/8 10:13:43 👁️ 浏览次数: 一、创建Dockerfile文件不需要加后缀名此步骤需要把你的requirements.txt里的内容给到AI结合上面的代码让他帮你输出最新的Dockerfile文件。【要求使用 GPU 进行推理和使用单阶段】# syntaxdocker/dockerfile:1.7 # 构建阶段 FROM nvidia/cuda:12.8.0-devel-ubuntu24.04 AS builder ENV PIP_INDEX_URLhttps://pypi.tuna.tsinghua.edu.cn/simple \ PIP_TRUSTED_HOSTpypi.tuna.tsinghua.edu.cn \ PYTHONDONTWRITEBYTECODE1 \ PYTHONUNBUFFERED1 \ PIP_NO_CACHE_DIR1 \ PIP_DISABLE_PIP_VERSION_CHECK1 # 安装 python3-venv 并创建虚拟环境 RUN apt-get update apt-get install -y --no-install-recommends \ python3.12-dev python3.12-venv python3-pip gcc default-libmysqlclient-dev pkg-config \ rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* \ userdel -r $(id -nu 1000 2/dev/null) 2/dev/null || true \ groupdel $(getent group 1000 | cut -d: -f1) 2/dev/null || true \ groupadd --gid 1000 appgroup \ useradd --uid 1000 --gid appgroup --create-home appuser \ mkdir -p /opt/venv \ chown -R appuser:appgroup /opt # 创建虚拟环境使用 appuser 身份 USER appuser RUN python3.12 -m venv /opt/venv ENV PATH/opt/venv/bin:$PATH WORKDIR /app COPY --chownappuser:appgroup requirements.txt . # 在虚拟环境中安装依赖并强制升级 redis 和 pydub 到兼容 Python 3.12 的版本 RUN pip install --no-cache-dir --no-compile -r requirements.txt \ pip install --no-cache-dir --no-compile --upgrade redis5.0.0 pydub0.25.1 # 运行时阶段 FROM nvidia/cuda:12.8.0-runtime-ubuntu24.04 ENV PYTHONUNBUFFERED1 \ PYTHONDONTWRITEBYTECODE1 \ PYTHONFAULTHANDLER1 \ PIP_NO_CACHE_DIR1 \ PIP_DISABLE_PIP_VERSION_CHECK1 \ LD_LIBRARY_PATH/usr/local/cuda/lib64:${LD_LIBRARY_PATH} RUN apt-get update apt-get install -y --no-install-recommends \ python3.12 python3.12-venv libsndfile1 ffmpeg libgomp1 libmysqlclient21 \ apt-get clean \ rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* \ update-alternatives --install /usr/bin/python python /usr/bin/python3.12 1 \ userdel -r $(id -nu 1000 2/dev/null) 2/dev/null || true \ groupdel $(getent group 1000 | cut -d: -f1) 2/dev/null || true \ groupadd --gid 1000 appgroup \ useradd --uid 1000 --gid appgroup --shell /bin/bash --create-home appuser # 从构建阶段复制虚拟环境 COPY --frombuilder --chownappuser:appgroup /opt/venv /opt/venv COPY --chownappuser:appgroup . /app # 激活虚拟环境 ENV PATH/opt/venv/bin:$PATH \ PYTHONPATH/opt/venv/lib/python3.12/site-packages:/app:$PYTHONPATH WORKDIR /app # 验证安装root 身份运行验证 RUN python -c import uvicorn; print(fuvicorn {uvicorn.__version__} OK) USER appuser EXPOSE 1112 HEALTHCHECK --interval30s --timeout10s --start-period40s --retries3 \ CMD python -c import urllib.request; urllib.request.urlopen(http://localhost:1112/health, timeout5) || exit 1 CMD [python, -m, uvicorn, main:app, --host, 0.0.0.0, --port, 1112, --proxy-headers]二、创建.dockerignore文件此步骤需要根据上面的Dockerfile文件进行AI生成# Python 缓存 __pycache__/ *.py[cod] *$py.class *.so .Python *.egg-info/ .eggs/ *.egg pip-wheel-metadata/ *.manifest *.spec # 虚拟环境 venv/ .venv/ env/ ENV/ env.bak/ venv.bak/ # IDE 和编辑器 .vscode/ .idea/ *.swp *.swo *~ .project .pydevproject .settings/ # 版本控制 .git/ .gitignore/ .gitattributes/ .gitmodules .svn/ .hg/ # 环境变量和秘密绝不能进镜像 .env .env.* .envrc *.local secrets/ *.key *.pem # 测试和开发 tests/ test/ testing/ .pytest_cache/ .coverage htmlcov/ .tox/ .nox/ .mypy_cache/ .dmypy.json *.cover .hypothesis/ # 文档保留 README 供参考 docs/_build/ *.md !README.md !CHANGELOG.md # Docker 本身 Dockerfile* docker-compose*.yml .docker/ .dockerignore # 构建产物 build/ dist/ *.tar.gz *.zip *.tgz # 日志 logs/ *.log *.log.* log/ # 临时文件 tmp/ temp/ temp_*/ *.tmp *.bak *.backup # 数据如果很大或通过 volume 挂载 data/ datasets/ *.csv *.tsv *.json *.jsonl *.parquet *.hdf5 *.h5 *.pkl *.pickle # 模型文件通常很大建议在容器内下载而非复制 *.pt *.pth *.ckpt *.safetensors *.onnx *.pb models/ checkpoints/ weights/ # 本地开发工具 .pre-commit-config.yaml .flake8 .black .isort.cfg mypy.ini bandit.yaml # 系统文件 .DS_Store Thumbs.db desktop.ini三、创建build.sh脚本文件此步骤需要根据上面的.dockerignore文件进行AI生成#!/bin/bash set -euo pipefail # 配置区 IMAGE_NAMEnew2026_data REGISTRY${REGISTRY:-} FULL_IMAGE_NAME${REGISTRY}${IMAGE_NAME} VERSION${VERSION:-latest} BUILD_DATE$(date -u %Y-%m-%dT%H:%M:%SZ) # 颜色输出 RED\033[0;31m GREEN\033[0;32m YELLOW\033[1;33m BLUE\033[0;34m NC\033[0m log_info() { echo -e ${GREEN}[INFO]${NC} $1; } log_warn() { echo -e ${YELLOW}[WARN]${NC} $1; } log_error() { echo -e ${RED}[ERROR]${NC} $1; } log_debug() { echo -e ${BLUE}[DEBUG]${NC} $1; } usage() { cat EOF 用法: $0 [选项] -t, --tag TAG 指定标签 (默认: ${VERSION}) --no-cache 禁用缓存 --push 构建后推送到仓库 -h, --help 显示帮助 EOF } # 检查 NVIDIA Container Toolkit check_nvidia_runtime() { if ! docker info 2/dev/null | grep -q nvidia; then log_warn 未检测到 NVIDIA Container Toolkit log_warn 请执行以下命令安装 echo sudo apt-get install -y nvidia-container-toolkit echo sudo nvidia-ctk runtime configure --runtimedocker echo sudo systemctl restart docker echo else log_info NVIDIA Container Toolkit 已配置 fi # 检查 nvidia-smi 是否可用 if command -v nvidia-smi /dev/null; then local gpu_info$(nvidia-smi --query-gpuname --formatcsv,noheader 2/dev/null | head -n 1 || echo Unknown) log_info 检测到 GPU: $gpu_info else log_warn 宿主机未安装 nvidia-smi容器内将无法使用 GPU fi } # 检查资源 check_resources() { log_info 检查系统资源... # 检查磁盘空间需要至少 20GB local docker_root/var/lib/docker if [ ! -d $docker_root ]; then docker_root/ fi local available_gb$(df -BG $docker_root 2/dev/null | awk NR2 {print $4} | sed s/G// || echo 0) # 确保是数字 if ! [[ $available_gb ~ ^[0-9]$ ]]; then available_gb0 fi if [ $available_gb -lt 20 ]; then log_warn 磁盘空间不足: ${available_gb}GB 20GB 推荐值 log_warn 建议清理: docker system prune -af read -p 是否继续? [y/N] -n 1 -r echo if [[ ! $REPLY ~ ^[Yy]$ ]]; then exit 1 fi else log_info 磁盘空间充足: ${available_gb}GB fi # 检查内存需要至少 4GB local mem_gb$(free -g 2/dev/null | awk /^Mem:/{print $2} || echo 0) if ! [[ $mem_gb ~ ^[0-9]$ ]]; then mem_gb0 fi if [ $mem_gb -lt 4 ]; then log_warn 内存不足: ${mem_gb}GB 4GB 推荐值 log_warn 建议关闭其他程序或增加交换空间 else log_info 内存充足: ${mem_gb}GB fi } # 验证构建结果 verify_build() { local image_tag$1 log_info 验证镜像: ${FULL_IMAGE_NAME}:${image_tag} # 检查 uvicorn 是否可用虚拟环境路径已配置好 if docker run --rm ${FULL_IMAGE_NAME}:${image_tag} python -c import uvicorn; print(uvicorn OK) 2/dev/null; then log_info ✓ Python 模块检查通过 else log_error ✗ Python 模块检查失败 log_error 尝试调试: docker run --rm -it ${FULL_IMAGE_NAME}:${image_tag} /bin/bash exit 1 fi # 检查 GPU 是否可用如果宿主机有 GPU if command -v nvidia-smi /dev/null; then if docker run --rm --gpus all ${FULL_IMAGE_NAME}:${image_tag} nvidia-smi /dev/null 21; then log_info ✓ GPU 支持检查通过 else log_warn ✗ GPU 支持检查失败可能是 NVIDIA Container Toolkit 未配置 fi fi local image_size$(docker images --format {{.Size}} ${FULL_IMAGE_NAME}:${image_tag}) log_info 镜像大小: $image_size } build() { local no_cache_flag${1:-} local tag${2:-$VERSION} local should_push${3:-false} log_info 开始构建镜像: ${FULL_IMAGE_NAME}:${tag} log_info 构建时间: ${BUILD_DATE} # 清理旧缓存避免冲突 rm -rf /tmp/.buildx-cache-new 2/dev/null || true export DOCKER_BUILDKIT1 set -x docker build \ ${no_cache_flag} \ -t ${FULL_IMAGE_NAME}:${tag} \ -t ${FULL_IMAGE_NAME}:latest \ --build-arg BUILD_DATE${BUILD_DATE} \ --build-arg VERSION${tag} \ -f Dockerfile \ . set x log_info 本地镜像构建完成 # 验证构建 verify_build ${tag} # 推送镜像如果指定了 --push if [ $should_push true ] [ -n $REGISTRY ]; then log_info 推送到仓库: ${FULL_IMAGE_NAME}:${tag} docker push ${FULL_IMAGE_NAME}:${tag} docker push ${FULL_IMAGE_NAME}:latest fi log_info 构建流程完成 log_info 运行命令: docker run --rm --gpus all -p 1112:1112 ${FULL_IMAGE_NAME}:${tag} log_info log_info 调试命令进入容器: log_info docker run --rm -it --gpus all --entrypoint /bin/bash ${FULL_IMAGE_NAME}:${tag} } main() { local no_cache local custom_tag local should_pushfalse while [[ $# -gt 0 ]]; do case $1 in -t|--tag) if [[ -z ${2:-} ]] || [[ $2 ~ ^- ]]; then log_error 错误: $1 需要一个参数 usage exit 1 fi custom_tag$2 shift 2 ;; --no-cache) no_cache--no-cache shift ;; --push) should_pushtrue shift ;; -h|--help) usage exit 0 ;; *) log_error 未知选项: $1 usage exit 1 ;; esac done check_nvidia_runtime check_resources local final_tag${custom_tag:-$VERSION} build ${no_cache} ${final_tag} ${should_push} } main $四、通过以下命令开始执行构建镜像文件给予权限 chmod x build.sh # 1. 构建生产镜像标签使用版本号 ./build.sh --no-cache -t v4.0.0 # 2. 启动服务后台运行 docker-compose up -d构建过程中的所有日志最后显示构建流程完成还提示您构建后运行镜像的命令和调试命令运行命令: docker run --rm --gpus all -p 1112:1112 new2026_data:v4.0.0调试命令docker run --rm -it --gpus all --entrypoint /bin/bash new2026_data:v4.0.0五、构建成功后将在Portainer镜像列表中看到构建成功的镜像文件六、注意事项1、如果你的程序里涉及大模型在构建镜像时如果出现以下问题解决办法sudo apt-get install -y nvidia-container-toolkitsudo nvidia-ctk runtime configure --runtimedockersudo systemctl restart docker解决方法步骤1添加 NVIDIA 官方 GPG 密钥验证包完整性curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg步骤2添加 NVIDIA 软件源适配 Ubuntu 版本jammy22.04focal20.04echo deb [signed-by/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/ubuntu22.04/$(ARCH) / | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list步骤3更新软件包索引sudo apt-get update步骤4执行你提供的核心命令sudo apt-get install -y nvidia-container-toolkitsudo nvidia-ctk runtime configure --runtimedockersudo systemctl restart docker2、如果你反复进行调试程序并进行生成镜像则需要清理Docker缓存、未使用的镜像、容器信息命令否则存在docker里文件会越来越大占用的硬盘空间会越来越大此时需要执行清理命令所有提示全部按Y来进行执行docker buildx prune docker buildx prune -af docker builder prune docker builder prune -af docker system prune docker system prune -a
答辩 PPT 还在熬夜排版?虎贲等考 AI PPT:10 分钟生成 “学术叙事型” 演示,评委眼前一亮 “熬 3 晚做的 PPT,被导师批‘逻辑混乱像流水账’”“图表排版歪歪扭扭,数据来源没标注”“答辩时漏讲核心创新点,评委追问时慌到忘词”—— 学术演示场景中,90% 的科研人都陷入过 “PPT 制作低效、呈现效果差、答辩准备不足” 的… 2026/7/6 6:59:11
科普|开题报告怎么写不返工?宏智树AI教你踩准评审核心要求 作为深耕论文写作科普的教育博主,每逢开题季,后台总能收到大量同学的求助,全是灵魂拷问: 其实开题报告真的不用头秃,它的核心不是“越复杂越好”,而是要踩准“逻辑通顺、规范达标、论证可行”的评审核心。… 2026/5/17 1:14:39
中国90米分辨率土壤质地含量数据集 图1 中国90米分辨率土壤表层有机碳含量数据 本数据集提供了中国范围内90米空间分辨率的四项关键土壤表层属性数据,包括砂粒含量(sand)、粉粒含量(silt)、粘粒含量(clay)和有机碳含量(… 2026/5/17 1:14:39
画情人节插画总拖慢进度?收藏 6 个素材站高效创作 每次着手绘制情人节相关插画,很容易卡在人物互动姿态、浪漫场景搭配、氛围感装饰元素构思上,反复打磨画面细节会消耗大量时间。想要快速完成完整画面,提前储备适配的创作参考十分关键。整理 6 个内容丰富的素材站点,覆盖多种绘画风… 2026/7/9 8:52:27
3C电子产品自动化测试怎么选?2026靠谱智能终端测试厂家深度盘点 智能终端测试:3C电子产品品质与体验的隐形守护者 在智能手机、平板电脑、智能穿戴设备、智能家电等3C电子产品竞争白热化的今天,"用户体验"已成为产品成败的核心分水岭。然而,如何科学量化"流畅度"、"触控精准度&q… 2026/7/9 8:52:27
大语言模型、RAG、多模态AI 你有没有遇到过这种情况:跑去问AI一个问题,它回答得滔滔不绝,逻辑清晰,听起来像模像样,但你就是有一种"哪里不对劲"的感觉。要么数据过时,要么答案与你的实际情况毫不相干,要么语气信… 2026/7/9 8:50:24
Py Eddy Tracker终极指南:如何高效识别和追踪海洋涡旋 Py Eddy Tracker终极指南:如何高效识别和追踪海洋涡旋 【免费下载链接】py-eddy-tracker Eddy identification and tracking 项目地址: https://gitcode.com/gh_mirrors/py/py-eddy-tracker 海洋中尺度涡旋是影响全球海洋环流、物质输送和能量平衡的关键过程… 2026/7/9 8:50:24
C# 多态性详解 多态(Polymorphism)是 C# 面向对象编程(OOP)的三大特性之一:封装(Encapsulation)继承(Inheritance)多态(Polymorphism)多态的核心思想:… 2026/7/9 8:44:22
开放词汇YOLO两大主流模型学习:YOLO-World与YOLOE 一、前言传统YOLO(YOLOv8/YOLO11)属于闭集检测,只能识别训练集中预定义类别,无人机航拍、工业巡检等场景经常出现未知目标,无法零样本识别。YOLO-World、YOLOE是基于YOLO架构的实时开放词汇目标检测模型,支… 2026/7/9 8:42:22
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08