Docker跨架构部署实操第二弹

在这里插入图片描述

1. 项目内容

  • 项目目录包含 Dockerfilemain.py,并且容器内路径固定为:
    • 数据:/root/autodl-tmp/data
    • 模型:/root/autodl-tmp/models
    • 保存:/root/autodl-tmp/save
  • 服务端口:9011(容器内与宿主映射为 -p 9011:9011)。
  • 文档示例以 Ubuntu(Linux)与 PowerShell(管理员)(Windows Server)为主,命令请根据实际路径与用户名替换。

2. Linux部署步骤

2.1 在 Ubuntu 上安装 Docker

# 1. 卸载旧版本(若存在)
sudo apt-get remove -y docker docker-engine docker.io containerd runc || true# 2. 更新系统并安装依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release# 3. 添加 Docker 官方 GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/keyrings/docker.gpg# 4. 添加 Docker APT 源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \| sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get update# 5. 安装 Docker Engine
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 6. 启动并检查
sudo systemctl enable --now docker
sudo systemctl status docker# 7. 可选:把当前用户加入 docker 组(避免 sudo)
sudo usermod -aG docker $USER
# 重新登录或运行:newgrp docker

注意:有些最小化镜像或云镜像没有 systemd,在这些环境 systemctl 可能不可用,需使用容器/发行版特定方法启动 dockerd

2.2 配置 Docker 镜像加速

编辑 /etc/docker/daemon.json(如果文件不存在则创建):

{"registry-mirrors": ["https://<your-mirror-host>"]
}

修改完成后:

sudo systemctl daemon-reload
sudo systemctl restart docker

2.3 构建镜像与运行容器

假设项目在 /home/you/project

cd /home/you/project
docker build -t my-flask-model:latest .# 运行容器并挂载三个目录
docker run -d \--name my-flask-model \--restart unless-stopped \-p 9011:9011 \-v /home/you/project/data:/root/autodl-tmp/data \-v /home/you/project/models:/root/autl-dtmp/models \-v /home/you/project/save:/root/autodl-tmp/save \my-flask-model:latest
1. 构建镜像

docker build -t my-flask-model:latest .

  • docker build:构建 Docker 镜像。
  • -t my-flask-model:latest:给镜像命名为 my-flask-model,版本号 latest
  • .:构建上下文(当前目录),包含 Dockerfile 与项目代码。
2. 运行容器

docker run -d [参数...] my-flask-model:latest

(1) 基础参数
  • -d:后台运行(detached mode)。
  • --name my-flask-model:容器名称,便于管理。
  • --restart unless-stopped:自动重启策略。
    • always → 总是重启。
    • unless-stopped → 仅在手动 stop 后不再重启。
    • no → 默认,不重启。
(2) 端口映射

-p 9011:9011

  • 格式:宿主机端口:容器端口
  • 把宿主机 9011 端口映射到容器 9011 端口,用于访问 Flask 服务。
(3) 目录挂载

-v 宿主机目录:容器目录

  • 数据目录:
    -v /home/you/project/data:/root/autodl-tmp/data
    宿主机数据集共享给容器。
  • 模型目录:
    -v /home/you/project/models:/root/autodl-tmp/models
    存储训练好的模型文件,保证持久化。
  • 保存目录:
    -v /home/you/project/save:/root/autodl-tmp/save
    存储上传文件或中间结果。

快速测试接口(本机):

curl -v -F "file=@./CustomModel.py" http://localhost:9011/train

2.4 常用管理与排查命令

# 查看容器
docker ps -a
# 日志
docker logs -f my-flask-model
# 进入容器
docker exec -it my-flask-model /bin/bash
# 停止/启动/重启
docker stop my-flask-model
docker start my-flask-model
docker restart my-flask-model
# 删除
docker rm -f my-flask-model
docker rmi my-flask-model:latest

2.5 运行部署脚本

#!/usr/bin/env bash
set -e# 简易安装脚本(Ubuntu)
# 用法: sudo ./install_docker_ubuntu.shsudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-releasesudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/keyrings/docker.gpgecho "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \| sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker# 给出提示
echo "Docker 安装完成。运行 'docker run --rm hello-world' 测试。"

3. Windows Server 2022部署

重要说明(先读)

  • Windows Server 2022 可启用 WSL2,并支持离线安装。
  • 推荐方案:在 Server 上离线安装 WSL2Docker Desktop,通过 Docker Desktop 提供的 Linux 环境直接运行 Linux 容器。
  • Docker Desktop 已包含轻量 Linux VM(基于 WSL2),因此无需在 WSL 内额外安装 Docker Engine。

3.1 总体流程

  1. 在 Windows Server 2022 上启用 Microsoft-Windows-Subsystem-LinuxVirtualMachinePlatform 功能。
  2. 从 GitHub 下载 WSL2 离线安装包(WSL 官方发布页),完成 WSL2 安装。
  3. 离线安装 Docker Desktop(可在联网机器下载 .exe 安装包,拷贝到 Server 执行)。
  4. 启动 Docker Desktop(其内部会自动启动 Linux 容器环境)。
  5. 在 Docker Desktop 的环境中,构建镜像并运行容器。

3.2 启用 WSL2 功能

# PowerShell(Admin)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart# 可选:启用 Hyper-V(某些功能需要)
# dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V-All /all /norestartRestart-Computer -Force

3.3 安装 WSL2 离线包

  • 到 WSL Releases 下载 .msixbundle.msi 离线包。
  • 拷贝到 Server 并运行安装。
  • 安装完成后,WSL2 就可用(Docker Desktop 会自动用它作为后端)。
    ![[7bbf3292-6019-422e-b14c-3a8578b968d8.png]]

3.4 安装 Docker Desktop(离线)

  1. 到 Docker Desktop 官方下载页 获取安装包(Windows .exe)。
  2. 在联网机器下载后,直接安装运行 ```
  3. 安装完成后,在 Docker Desktop 设置里确认:
    • General → Use the WSL 2 based engine 已勾选。
    • 确保分配给 Docker 的 CPU/内存资源合理。

3.5 构建与运行项目容器

PowerShell (Windows) 下:

cd C:\project
docker build -t my-flask-model:latest .docker run -d `--name my-flask-model `--restart unless-stopped `-p 9011:9011 `-v C:\project\data:/root/autodl-tmp/data `-v C:\project\models:/root/autodl-tmp/models `-v C:\project\save:/root/autodl-tmp/save `my-flask-model:latest
  • docker builddocker run 实际运行在 Docker Desktop 提供的 Linux 容器环境中。
  • 通过 -v 参数挂载 Windows 文件夹到容器内路径,实现数据与模型的持久化。
  • 服务可在宿主机 http://localhost:9011 或服务器 IP 上访问。

3.6 说明

  • 不需要在 WSL 内单独安装 Docker Engine,因为 Docker Desktop 已提供完整的 Linux 容器运行环境。
  • 如果只运行 Linux 容器(你的 Flask 项目就是),推荐全程使用 Docker Desktop。
  • 如果未来需要运行 Windows 容器,则可考虑安装 Docker Engine for Windows 并启用 Windows 容器模式。

4.虚拟机下windows部署

如果 Windows Server 2022 是安装在虚拟机中的,需要开启 二次虚拟化(Nested Virtualization) 才能运行 WSL2 和 Docker Desktop。

1. VMware 设置

  1. 关闭虚拟机

  2. 打开 VMware → 选中虚拟机 → 编辑虚拟机设置

  3. 进入 处理器(CPU) 设置

  4. 勾选:

    • 虚拟化 Intel VT-x/EPT 或 AMD-V/RVI
    • 将虚拟化应用到客户机操作系统
  5. 保存并重启虚拟机 → 进入 Windows Server → 安装 WSL2 & Docker。

2. Hyper-V 设置(可选)

如果是 Hyper-V,需要确保宿主机开启:
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

5. 项目特定注意事项

  1. 文件保存路径与挂载:你的 main.py 将文件保存到 /root/autodl-tmp/models/root/autodl-tmp/save 等路径。确保宿主机对应目录存在且容器用户有写权限(如果在容器内使用 root,通常无问题;若你改变容器运行用户,需注意权限)。
  2. 依赖版本兼容性skl2onnx.convert_sklearnscikit-learn 版本有兼容性要求;如果在容器内遇到转换错误,请考虑固定(pin)scikit-learnskl2onnx 版本。
  3. 持久化与备份:模型与保存目录应做宿主机持久化(你已通过 -v 挂载)。建议在生产环境中定期备份 /root/autodl-tmp/models
  4. 构建缓存:Docker 构建时可利用缓存加速,CI/CD 环境中建议合理拆分 Dockerfile,将变化少的依赖放在前面。
  5. 日志与监控:容器内 print() 会输出到主机日志(docker logs)。建议在生产中把日志采集到集中化系统(如 ELK、Prometheus + Grafana)。

6. 常见问题与解决建议

  • 容器启动但端口无法访问

    • 检查 docker ps 的端口映射是否正确;
    • 检查宿主防火墙(Linux iptables / firewalld;Windows 防火墙)是否放行 9011;
    • 容器内 Flask 是否成功监听 0.0.0.0:9011(而不是 127.0.0.1)。
  • 文件挂载后容器内看不到文件

    • 确保主机路径存在并且有正确权限;
    • 在 Windows 上,建议在 WSL 内运行 Docker 构建/运行以避免路径与权限问题。
  • docker build 卡在 pip install

    • 网络问题或 PyPI 源慢;Dockerfile 中已使用国内镜像(如果你在国内),也可以在 pip install 增加 --timeout 或使用预下载的 wheel 包。
  • WSL 离线导入时报错

    • 确认已安装并正确运行 wsl_update_x64.msi,并重启 Windows;
    • 检查 wsl --status 输出以确认默认版本与已导入发行版版本。

7. 生产环境可选增强

  • 使用反向代理(Nginx/Traefik)做 TLS 终端与请求转发;
  • 将服务容器化编排到 Kubernetes / Docker Swarm 实现高可用与弹性伸缩;
  • 用 CI/CD(GitHub Actions、GitLab CI、Jenkins)自动构建/推送镜像并在目标机上自动部署;
  • 对敏感数据(如模型权重、密钥)使用机密管理(Vault、Kubernetes Secrets 等)。

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

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

相关文章

PyTorch 学习率调度器(LR Scheduler)

文章目录 PyTorch 学习率调度器&#xff08;LR Scheduler&#xff09;1. 一句话定义2. 通用使用套路3. 内置调度器对比速览4. 各调度器最小模板① LambdaLR&#xff08;线性 warmup&#xff09;② StepLR③ MultiStepLR④ CosineAnnealingLR⑤ ReduceLROnPlateau&#xff08;必…

新后端漏洞(上)- Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)

漏洞介绍&#xff1a;Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本&#xff08;包含&#xff09;以前存在一处SpEL表达式注入漏洞&#xff0c;当攻击者可以访问Actuator API的情况下&#xff0c;将可以利用该漏洞执行任意命令。漏洞环境&#xff1a;docke…

【OJ】C++ vector类OJ题

只出现过一次的数字&#xff08;简单&#xff09; 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 这道题使用异或就非常简单了&#xff0c;所有数异或到一起&#xff0c;相同的数据双双消除&#xff0c;只剩下一个的数。 C语言异或运算详解-CSDN博客 clas…

为什么外网主机可以telnet通内网nginx端口,但是http请求失败?

问题是这样的:我内网主机nginx配置了 域名80端口&#xff0c;然后防火墙没有配置80端口&#xff0c;但是外网机子去telnet 80端口可以通&#xff0c;用浏览器请求域名不能访问nginx&#xff0c;然后防火墙开了80端口后&#xff0c;浏览器就可以访问nginx了&#xff0c;为什么防…

【Linux游记】基础指令篇

​​​​​​ 枫の个人主页 你不能改变过去&#xff0c;但你可以改变未来 算法/C/数据结构/C/Linux Hello&#xff0c;这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕&#xff0c;我们继续来学习C&#xff0c;C更新的同时我也会更新Linux。Linux操作系统是很经典的…

阿里云-基于通义灵码实现高效 AI 编码 | 4 | 场景学习:3分钟写一个音乐闹钟小应用

文章目录一、初版需求与代码生成二、需求迭代与代码更新三、需求细化与功能完善3.1 pygame安装3.2 放置音乐文件3.3 执行代码免费个人运维知识库&#xff0c;欢迎您的订阅&#xff1a;literator_ray.flowus.cn 一、初版需求与代码生成 首先向通义灵码提出了基本需求&#xff1…

【算法笔记】欧拉降幂公式与欧拉函数

欧拉降幂公式 在数论中&#xff0c;欧拉降幂公式是一个强大的工具&#xff0c;用于简化大指数模运算。公式如下&#xff1a; ∀k>φ(m)&#xff0c;有Ak≡Akmodφ(m)φ(m)(modm)成立。\forall k > \varphi(m)&#xff0c;有 A^k \equiv A^{k \mod \varphi(m) \varphi(m…

基于STM32的交通灯设计—紧急模式、可调时间

基于STM32交通灯设计&#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09;功能介绍具体功能&#xff1a;1.数码管和LED模拟交通灯&#xff1b;2.南北绿灯9秒&#xff0c;东西绿灯15秒&#xff0c;黄灯2秒&#xff1b;3.紧急情况&#xff1a;按下按键&#xff0c;…

汽车软件研发智能化:AI在CI/CD中的实践

当汽车行业加速驶入“软件定义”的时代&#xff0c;软件已成为决定车辆竞争力的核心要素。从智能座舱的多场景交互到自动驾驶的复杂决策逻辑&#xff0c;汽车软件的代码量逐年递增&#xff0c;复杂度呈指数级攀升&#xff0c;传统研发流程深陷困境&#xff1a;代码质量管控滞后…

DeepSeek:开启智能体驱动对话式数据分析新时代

在数字化浪潮汹涌澎湃的当下,数据已然成为驱动企业发展、推动科学研究以及优化日常生活决策的关键力量。数据分析,作为从海量数据中提取有价值信息、洞察趋势、挖掘规律的核心手段,其重要性不言而喻。无论是企业精准把握市场动态、优化运营流程,还是科研人员探索未知领域、…

MCP驱动企业微信智能中枢:企业级机器人服务构建全攻略

一、背景与目标 公司规模200-300人&#xff0c;主要使用企业微信作为内部沟通平台。日常面临大量重复性通知工作&#xff0c;如会议提醒、系统维护通知、项目进度更新等。 业务痛点&#xff1a; 人工发送通知效率低下&#xff0c;平均3分钟/条重要信息传递不及时&#xff0c…

语音识别系统的技术核心:从声音到文字的智能转换

语音识别技术&#xff0c;也称为自动语音识别&#xff08;ASR&#xff09;&#xff0c;其核心目标是将人类语音信号转换为对应的文本或指令。随着人工智能的发展&#xff0c;语音识别已成为智能助手、实时翻译、车载系统等领域的关键技术。其工作原理可分解为信号处理、特征提取…

《用 Django 构建博客应用:从模型设计到文章管理的全流程实战》

《用 Django 构建博客应用:从模型设计到文章管理的全流程实战》 一、引言:为什么选择 Django 构建博客系统? 在 Python 的 Web 框架中,Django 被誉为“全能型选手”。它不仅提供了强大的 ORM、模板系统、认证机制和后台管理,还鼓励开发者遵循“DRY”(Don’t Repeat You…

以 R1 为视角,手把手教你画 OSPF 最短路径树与推导路由表

视频版讲解>>>>>>>>>>>>>>>>>>>OSPF最短路径树构建与路由计算练习&#xff08;一&#xff09; 在 OSPF 协议的学习中&#xff0c;“纸上谈兵” 不如 “实战推演”—— 尤其是以特定路由器为主视角&#xff0c;从 LS…

axios请求缓存与重复拦截:“相同请求未完成时,不发起新请求”

import axios from "axios";// 1. 缓存已完成的请求结果&#xff08;key&#xff1a;请求URL参数&#xff0c;value&#xff1a;数据&#xff09; const requestCache new Map(); // 2. 记录正在执行的请求&#xff08;避免并行重复请求&#xff09; const pendingR…

k8s的SidecarSet配置和initContainers

目录引言一、k8s如何实现Sidecar这段配置正确吗&#xff1f;正确的配置方式为什么这样做&#xff1f;一个简单的例子总结二、什么是SidecarSet主要功能使用场景示例配置三、也可以通过 initContainers 的 restartPolicy 实现边车逻辑四、题外话&#xff1a;什么是InitContainer…

PostgreSQL与SQL Server:为什么 PostgreSQL遥遥领先

PostgreSQL与SQL Server:为什么 PostgreSQL遥遥领先 在数据库领域&#xff0c;PostgreSQL 和 Microsoft SQL Server 长期以来一直是竞争对手。然而&#xff0c;近年来&#xff0c;PostgreSQL 以其性能、灵活性和创新功能让 SQL Server 望尘莫及。以下是对 PostgreSQL 明显优越的…

零跑汽车8月交付57066台,同比增长超88%

零跑汽车官宣&#xff0c;在刚刚过去的8月份&#xff0c;品牌交付57066辆&#xff0c;同比增长超88%再创历史新高&#xff0c;并实现了连续6个月稳坐新势力销冠。目前&#xff0c;零跑旗下共有T03、B10、B01、C01、C10、C11、C16等七款车型在售&#xff0c;得益于零跑坚持全栈自…

DNS地址推荐

DNS地址推荐&#xff08;2025年最新整理&#xff09; 以下DNS服务器按使用场景分类&#xff0c;涵盖国内、国际、安全隐私、游戏优化等需求&#xff0c;均为2025年仍在维护的公共DNS服务&#xff1a; 一、国内通用DNS&#xff08;适合中国大陆用户&#xff09; 国内DNS服务器对…

兴趣电商内容数据洞察未来市场走向研究——基于开源AI智能名片链动2+1模式S2B2C商城小程序的实践

摘要&#xff1a;在互联网电商数据高度透明的当下&#xff0c;“已发生”的品类规模和品类增速数据虽易获取&#xff0c;但主要反映市场历史状况&#xff0c;难以预测未来走向。兴趣电商的内容数据因揭示消费者“新需求”和“潜在需求”&#xff0c;在宏观层面更早体现用户消费…