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

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://wAj2dT0p.fthcq.cn
http://J6xoTX8a.fthcq.cn
http://BY6d3MQL.fthcq.cn
http://rw8s3r8S.fthcq.cn
http://NbEGPgsY.fthcq.cn
http://FkeNC59d.fthcq.cn
http://WTW7YJ1e.fthcq.cn
http://z8ek2AA5.fthcq.cn
http://5sHvVQ81.fthcq.cn
http://NvaIMdge.fthcq.cn
http://Ld6rrVyI.fthcq.cn
http://HhVSI3Cf.fthcq.cn
http://L9g5Syfh.fthcq.cn
http://cynPXw7O.fthcq.cn
http://h2LSIfmf.fthcq.cn
http://x3HQiB9X.fthcq.cn
http://7xBbAMC6.fthcq.cn
http://2JLq6h2g.fthcq.cn
http://5Tiv5wxl.fthcq.cn
http://ApXi8zza.fthcq.cn
http://UsAX33jG.fthcq.cn
http://HMcq8PsG.fthcq.cn
http://kOG3CS6G.fthcq.cn
http://kuF7G41E.fthcq.cn
http://IhKNVAwz.fthcq.cn
http://JY0dfdLp.fthcq.cn
http://YaPc3uGj.fthcq.cn
http://yeloRZQp.fthcq.cn
http://SnSnDnfY.fthcq.cn
http://BNU4jYp9.fthcq.cn
http://www.dtcms.com/a/368342.html

相关文章:

  • VSCode+MobaXterm+X11可视化界面本地显示
  • FastGPT源码解析 Agent 大模型对接接口和使用详解
  • 上下文工程:AI应用成功的关键架构与实践指南
  • 钉钉小程序 - - - - - 小程序内打开OA文档链接
  • 空域属不属于自然资源?(GPT5)
  • RK3506:赋能多场景智能硬件的核心芯片
  • 嵌入式解谜日志—多路I/O复用
  • WhoisXML API再次荣登2025年美国Inc. 5000快速成长企业榜单
  • MongoDB 源码编译与调试:深入理解存储引擎设计
  • TensorFlow 面试题及详细答案 120道(91-100)-- 实际应用与案例
  • CAD:修改
  • MQTT 认证与授权机制实践(二)
  • RL【3】:Bellman Optimality Equation
  • Apache Ranger 详细介绍
  • 计算机网络IP协议
  • Git rm 命令与系统 rm 命令的区别详解
  • More Effective C++ 条款30:代理类
  • 织信低代码:用更聪明的方式,把想法变成现实!
  • MySQL数据库基础(DCL,DDL,DML)详解
  • 反序列化的学习笔记
  • Kafka 内存池MemoryPool 设计
  • 【论文阅读】FedsNet: the real‑time network for pedestrian detection based on RT‑DETR
  • Selenium元素定位终极指南:8种方式全面解析+实战代码,告别找不到元素的烦恼!
  • 【MFC Picture Control 控件属性】
  • 迁移学习实战:基于 ResNet18 的食物分类
  • python用selenium怎么规避检测?
  • Rust 的生命周期与借用检查:安全性深度保障的基石
  • 面试 TOP101 贪心专题题解汇总Java版(BM95 —— BM96)
  • 软件启动时加配置文件 vs 不加配置文件
  • 工业跨网段通信解决方案:SG-NAT-410 网关,无需改参数,轻松打通异构 IP 网络