最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker跨架構(gòu)部署實(shí)操小結(jié)

 更新時(shí)間:2025年07月27日 14:28:39   作者:油潑辣子多加  
本文主要介紹了Docker跨架構(gòu)部署實(shí)操小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

需求場景

python項(xiàng)目,開發(fā)環(huán)境以及可供測試的環(huán)境為X86架構(gòu)下的LINUX服務(wù)器,但正式環(huán)境需要部署在ARM架構(gòu)下的麒麟服務(wù)器,且正式環(huán)境后續(xù)可能會(huì)長時(shí)間處于斷網(wǎng)狀態(tài),需要一份跨架構(gòu)的部署方案。

解決思路

在 X86 上打包、在 ARM(麒麟 Linux)上運(yùn)行,最大的難點(diǎn)就在于二進(jìn)制兼容性——X86 編譯出的可執(zhí)行文件(無論是用 PyInstaller 還是其它方式)都無法直接在 ARM 上跑。下面分別說一下兩種方案的利弊,供你決策時(shí)參考:

Docker 多架構(gòu)鏡像

優(yōu)點(diǎn)

  1. 環(huán)境一致性
    通過 Dockerfile 明確聲明基礎(chǔ)鏡像、系統(tǒng)包、Python 版本、依賴庫版本等,避免「開發(fā)機(jī)能跑、線上機(jī)跑不起來」的坑。
  2. 多平臺(tái)支持
    利用 Docker 官方提供的多架構(gòu)基礎(chǔ)鏡像(如 python:3.x-slim),配合 Docker Buildx,可以一次性編譯出適用于 amd64、arm64 等多種架構(gòu)的鏡像。
  3. 零交叉編譯成本
    你不需要在 X86 上搞復(fù)雜的交叉編譯工具鏈,只要在 Dockerfile 里寫好指令,Buildx 就能在后臺(tái)(或遠(yuǎn)程 builder)幫你做。

缺點(diǎn)

  1. 鏡像體積
    即便用 slimalpine,完整 Python 運(yùn)行時(shí)的鏡像通常也在幾十 MB 以上,如果部署環(huán)境對(duì)鏡像大小有苛刻要求,可能需要你做深度瘦身。
  2. 運(yùn)維依賴
    線上機(jī)器要跑 Docker;如果你的正式環(huán)境是「只能跑二進(jìn)制、不能裝 Docker」的受限環(huán)境,則不可用。

PyInstaller 打包成單文件可執(zhí)行

優(yōu)點(diǎn)

  1. 無須容器化
    只要拿到一個(gè)可執(zhí)行文件,線上直接部署即可,不用關(guān)心 Docker 或容器平臺(tái)。
  2. 單文件交付
    如果團(tuán)隊(duì)習(xí)慣把交付物放到文件服務(wù)器、再由運(yùn)維拷貝到目標(biāo)機(jī)器,這種方式更簡單。

缺點(diǎn)

  1. 必須在 ARM 機(jī)器上打包
    PyInstaller 打出來的 ELF 可執(zhí)行檔會(huì)綁定打包時(shí)的 CPU 架構(gòu);在 X86 上編的程序跑不了 ARM。你要么在真正的 ARM Kirin 機(jī)器上打包,要么在 X86 上借助 QEMU + chroot/交叉編譯環(huán)境才能打出 ARM 二進(jìn)制,配置成本高。
  2. 依賴隱蔽
    Python 動(dòng)態(tài)庫、C 擴(kuò)展包、系統(tǒng)庫等都要一一收集到打包目錄,版本不對(duì)就可能「缺少依賴」或「符號(hào)找不到」。

Docker 多架構(gòu)鏡像

下面給出一個(gè) 從 X86 機(jī)器打包,到 脫網(wǎng) ARM 麒麟服務(wù)器離線部署 的全流程示例。假設(shè)你的項(xiàng)目結(jié)構(gòu)和文件列表如下:

myapp/
├── langou_model_mainfun.py
├── langou_model_dataprocessing.py
├── langou_model_function.py
├── langou_model_param.py
├── requirements.txt
└── .dockerignore

1. 在 X86 機(jī)上準(zhǔn)備項(xiàng)目

創(chuàng)建 .dockerignore(減少鏡像體積)
myapp/ 下新建 .dockerignore,內(nèi)容示例:

__pycache__/
*.pyc
.git
.idea
*.log

編寫 Dockerfile
myapp/ 下新建 Dockerfile,內(nèi)容如下:

FROM docker.1ms.run/library/python:3.9-slim

WORKDIR /app

# 復(fù)制依賴并安裝
RUN pip3 install --no-cache-dir torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 復(fù)制所有源碼文件
COPY . .

# (可選)健康檢查:確保至少能 import 主模塊
HEALTHCHECK --interval=30s --timeout=3s \
  CMD python -c "import langou_model_mainfun" || exit 1

# 容器啟動(dòng)時(shí)執(zhí)行主腳本
CMD ["python", "langou_model_mainfun.py"]

2. 在 X86 機(jī)上啟用 Buildx + QEMU

檢查 Docker 版本 & Buildx

docker version
docker buildx version

注冊 QEMU 模擬器(支持在本機(jī)模擬 ARM 構(gòu)建,使用國內(nèi)鏡像)

docker run --rm --privileged docker.1ms.run/multiarch/qemu-user-static --reset -p yes

創(chuàng)建并切換到 buildx Builder

docker buildx create --name mybuilder --use --driver docker-container --driver-opt image=docker.1ms.run/moby/buildkit:buildx-stable-1

docker buildx inspect --bootstrap

3. 構(gòu)建 ARM64 鏡像并導(dǎo)出為離線包

myapp/ 目錄下運(yùn)行:

docker buildx build \
  --platform linux/arm64 \
  --tag myapp:arm64-v1.0 \
  --output type=docker,dest=./myapp_arm64_v1.0.tar \
  .
  • --platform linux/arm64:生成 ARM64 架構(gòu)鏡像
  • --output type=docker,dest=...tar:將鏡像導(dǎo)出為 tar

執(zhí)行完后,你會(huì)在 myapp/ 目錄看到 myapp_arm64_v1.0.tar。

4. 拷貝鏡像包到服務(wù)器

假設(shè)你在開發(fā)機(jī)上生成了 myapp_arm64_v1.0.tar,用 scp、USB 或其他方式,把它放到服務(wù)器上的某個(gè)目錄,比如 /opt/deploy/myapp/

# 在開發(fā)機(jī)上
scp myapp_arm64_v1.0.tar root@arm-server:/opt/deploy/myapp/

5. 在服務(wù)器上加載鏡像

cd /opt/deploy/myapp/
docker load -i myapp_arm64_v1.0.tar

運(yùn)行后你應(yīng)該能看到類似:

Loaded image: myapp:arm64-v1.0

6. 運(yùn)行容器

docker run 時(shí)指定 --restart 參數(shù):

docker run -d \
  --name myapp \
  --restart always \
  -v /opt/deploy/myapp/conf:/app/conf:ro \
  -e SOME_ENV=foo \
  myapp:arm64-v1.0
  • --restart no (默認(rèn))容器退出后不重啟
  • --restart on-failure[:max-retries]
  • --restart always 宿主機(jī)重啟后始終重啟容器
  • --restart unless-stopped 類似 always,但如果你手動(dòng) docker stop 過,就不會(huì)再自動(dòng)重啟

推薦使用 --restart unless-stopped,這樣即使遇到異常也重啟,但運(yùn)維手動(dòng)停過就不會(huì)被“頑固”重啟。

7. 驗(yàn)證運(yùn)行狀態(tài)

docker ps
docker logs myapp
  • docker ps:查看容器是否在運(yùn)行
  • docker logs myapp:查看啟動(dòng)日志,確認(rèn)沒有錯(cuò)誤

Tip

  • 如果你不需要掛載任何外部文件,則直接:
docker run -d --name myapp myapp:arm64-v1.0
  • 要停止或刪除容器:
docker stop myapp
docker rm myapp

到此這篇關(guān)于Docker跨架構(gòu)部署實(shí)操小結(jié)的文章就介紹到這了,更多相關(guān)Docker跨架構(gòu)部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker部署nodejs開發(fā)環(huán)境詳細(xì)步驟(基礎(chǔ)示例篇)

    docker部署nodejs開發(fā)環(huán)境詳細(xì)步驟(基礎(chǔ)示例篇)

    這篇文章主要給大家介紹了docker部署nodejs開發(fā)環(huán)境詳細(xì)步驟,docker是一個(gè)開源的應(yīng)用容器引擎,可以為我們提供安全、可移植、可重復(fù)的自動(dòng)化部署的方式,需要的朋友可以參考下
    2023-10-10
  • 理解Docker(1):Docker安裝和基礎(chǔ)用法詳細(xì)介紹

    理解Docker(1):Docker安裝和基礎(chǔ)用法詳細(xì)介紹

    本篇文章主要是介紹了Docker 安裝和基礎(chǔ)用法,對(duì)于想要需要的Docker的同學(xué)可以了解一下。
    2016-11-11
  • docker部署nginx服務(wù)的實(shí)現(xiàn)步驟

    docker部署nginx服務(wù)的實(shí)現(xiàn)步驟

    本文主要介紹了docker部署nginx服務(wù)的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • 使用docker compose搭建一個(gè)elk系統(tǒng)的方法

    使用docker compose搭建一個(gè)elk系統(tǒng)的方法

    這篇文章主要介紹了使用docker-compose搭建一個(gè)elk系統(tǒng)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • IDEA集成docker部署springboot項(xiàng)目的全過程

    IDEA集成docker部署springboot項(xiàng)目的全過程

    這篇文章主要介紹了IDEA集成docker部署springboot項(xiàng)目,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • CentOS7 Docker防火墻的簡單配置教程

    CentOS7 Docker防火墻的簡單配置教程

    這篇文章主要給大家介紹了關(guān)于CentOS7 Docker防火墻的簡單配置方法,以及總結(jié)了docker在centos7下的一些坑,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Docker與Jenkins實(shí)現(xiàn)RuoYi-Vue前后端分離項(xiàng)目的CICD全流程自動(dòng)化

    Docker與Jenkins實(shí)現(xiàn)RuoYi-Vue前后端分離項(xiàng)目的CICD全流程自動(dòng)化

    在現(xiàn)代軟件開發(fā)流程中,持續(xù)集成/持續(xù)部署(CICD)已經(jīng)成為提升開發(fā)效率、保障代碼質(zhì)量的關(guān)鍵實(shí)踐,本文將詳細(xì)介紹如何利用Docker容器化技術(shù)結(jié)合Jenkins,搭建一套完整的CICD流程,實(shí)現(xiàn)RuoYi-Vue前后端分離項(xiàng)目的自動(dòng)化構(gòu)建、測試和部署,從代碼提交到自動(dòng)部署的全流程自動(dòng)化
    2026-01-01
  • Docker鏡像壓縮與優(yōu)化操作

    Docker鏡像壓縮與優(yōu)化操作

    這篇文章主要介紹了Docker鏡像壓縮與優(yōu)化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Docker容器日志占用空間過大問題及解決

    Docker容器日志占用空間過大問題及解決

    這篇文章主要介紹了Docker容器日志占用空間過大問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 煮餃子論云原生docker與kubernetes之間的關(guān)系

    煮餃子論云原生docker與kubernetes之間的關(guān)系

    這篇文章主要為大家用煮餃子論的道理來為大家講解一下云原生docker與kubernetes之間的關(guān)系,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03

最新評(píng)論

西华县| 乳源| 扎赉特旗| 太仆寺旗| 宁化县| 托克逊县| 即墨市| 临沧市| 韶关市| 庆城县| 额敏县| 甘谷县| 庆云县| 永清县| 日土县| 咸宁市| 雷波县| 柳河县| 津市市| 和平县| 瑞昌市| 山东| 沙湾县| 深泽县| 米易县| 垣曲县| 顺昌县| 盐边县| 永吉县| 星子县| 长泰县| 抚顺市| 宁都县| 张家界市| 台湾省| 博客| 梅河口市| 永嘉县| 贺兰县| 尤溪县| 高雄市|