python項目打包成docker容器鏡像的兩種方法實現(xiàn)
簡單版:(一次成功,后續(xù)下載對應(yīng)的軟件依賴)
方便運維、麻煩研發(fā)!
現(xiàn)有項目如下:

已經(jīng)壓縮成tar包,需要制作成容器鏡像
如何操作?
第一步:肯定是構(gòu)建dockerfile,如下:
FROM python:3.12.4 ##基于什么版本的python,取決于你的環(huán)境,可以pip檢測一下 LABEL maintainer="laohu" ##命名標(biāo)簽 RUN mkdir -p /prediction_service_revised ##創(chuàng)建容器內(nèi)的工作目錄 COPY Miniconda3-latest-Linux-x86_64.sh /prediction_service_revised ##將自己構(gòu)建所需要的工具復(fù)制到工作目錄中 ADD ./prediction_service_revised.tar.gz /prediction_service_revised #將python包導(dǎo)入到容器 WORKDIR /prediction_service_revised ##定義工作目錄 CMD ["python"] ##命令使用
第二步,構(gòu)建鏡像
docker build -t prediction_service_revised:v1 .
等待構(gòu)建,構(gòu)建完成!
docker images
此方法,構(gòu)建快,但是完全為基礎(chǔ)鏡像,任何python所需要的庫都沒有,需要研發(fā)自行下載!

可查看構(gòu)建緩存(只有鏡像占用的位置,這里我刪除了,所以不顯示?。?/h3>
docker system df
或者 docker system df -v
docker system df 或者 docker system df -v

復(fù)雜版:(構(gòu)建多次,依賴包下載依賴于選擇的庫地址,構(gòu)建緩存較大)
方便研發(fā)、麻煩運維!
依舊是之前的項目
第一步:在工作目錄終端,使用pip freeze > requirements.txt 命令將項目依賴庫進(jìn)行導(dǎo)出。
(生成需要的依賴庫環(huán)境包)
命令執(zhí)行完成后會生成一個叫requirements.txt的文件
pip freeze > requirements.txt
這些依賴包并不能一次性下載完成,構(gòu)建鏡像時,若構(gòu)建不成功,則會產(chǎn)生構(gòu)建緩存,占空間!
第二步:構(gòu)建dockerfile
FROM python:3.12.4 LABEL maintainer="laohu' RUN apt-get update && apt-get install -y build-essential RUN mkdir -p /prediction_service_revised COPY requirements.txt /prediction_service_revised ADD ./prediction_service_revised.tar.gz /prediction_service_revised WORKDIR /prediction_service_revised RUN pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/ RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ CMD ["python"]

第三步,構(gòu)建鏡像
docker build -t prediction_service_revised:v1 .
出現(xiàn)下列之類的問題,就是下載對應(yīng)的pip依賴庫失敗,需要根據(jù)問題響應(yīng),依次解決依賴庫問題,直至構(gòu)建成功!

例:

構(gòu)建成功:

構(gòu)建緩存如下:
docker system df 或者 docker system df -v

那么問題來了,如何清理這些緩存?
# 刪除未使用的構(gòu)建緩存 docker builder prune # 更徹底,刪除所有緩存,包括可能還會用到的 docker builder prune --all docker builder prune --all 清理構(gòu)建緩存 docker container prune 清理沒用的容器 docker image prune 清理懸空鏡像 docker volume prune 清理沒用的卷 docker network prune 清理沒用的網(wǎng)絡(luò) docker system prune -a --volumes 一鍵清理
一鍵清理如果你只是做實驗,對數(shù)據(jù)不敏感,可以直接:
docker system prune -a --volumes
這會刪除所有:
已停止的容器
沒有 tag 的鏡像
沒用的卷
沒用的網(wǎng)絡(luò)
構(gòu)建緩存
空間釋放得最快,但要注意數(shù)據(jù)卷和緩存一旦清理,就無法恢復(fù)。
更深入的檢查有時候你清理完,空間還是很大,可以直接查看 /var/lib/docker 下哪些目錄占用:
sudo du -h --max-depth=1 /var/lib/docker | sort -h
常見大戶:
overlay2/:鏡像和容器的文件系統(tǒng)
volumes/:卷的數(shù)據(jù)
buildkit/:構(gòu)建緩存
如果 build kit 特別大,就說明問題出在構(gòu)建緩存。
到此這篇關(guān)于python項目打包成docker容器鏡像的兩種方法實現(xiàn)的文章就介紹到這了,更多相關(guān)python打包成docker鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pycharm運行出現(xiàn)ImportError:No module named的解決方法
今天小編就為大家分享一篇pycharm運行出現(xiàn)ImportError:No module named的解決方法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
PyQt5+QtChart實現(xiàn)繪制極坐標(biāo)圖
QChart是一個QGraphicScene中可以顯示的QGraphicsWidget。本文將利用QtChart實現(xiàn)極坐標(biāo)圖的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12
解決jupyter notebook顯示不全出現(xiàn)框框或者亂碼問題
這篇文章主要介紹了解決jupyter notebook顯示不全出現(xiàn)框框或者亂碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04

