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
英文地址,請注明出處:http://en.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;在宏觀層面更早體現用戶消費…