python項(xiàng)目打包成docker鏡像并運(yùn)行的完整指南
眾所周知,python是解釋型腳本語(yǔ)言,無需編譯即可運(yùn)行,但是同時(shí)也強(qiáng)依賴于運(yùn)行環(huán)境,而將運(yùn)行環(huán)境和項(xiàng)目程序一同打包到docker鏡像中,可以方便快速的移植部署。(以下方法為手動(dòng)拷貝項(xiàng)目到linux服務(wù)器,如果需要可以使用git對(duì)代碼進(jìn)行管理)
假設(shè)你的項(xiàng)目目錄結(jié)構(gòu)如下:

1.創(chuàng)建requirements.txt
在項(xiàng)目根目錄下創(chuàng)建requirements.txt文件,用于記錄項(xiàng)目運(yùn)行所需的所有第三方庫(kù)及其精確版本。
Logbook==1.7.0.post0 pandas==2.0.3 PyMySQL==1.1.1 Requests==2.32.3 Flask==2.0.3 werkzeug==2.0.3
2.創(chuàng)建Dockerfile
在項(xiàng)目根目錄創(chuàng)建Dockerfile文件。
# Python基礎(chǔ)鏡像 FROM docker.m.daocloud.io/library/python:3.8-slim # 設(shè)置工作目錄 WORKDIR / # 復(fù)制requirements.txt文件 COPY /requirements.txt . # 安裝依賴(官方源速度較慢,使用阿里源) RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # 復(fù)制應(yīng)用程序代碼 COPY ./ . # 暴露端口(如果你的應(yīng)用需要) EXPOSE 5000 # 定義環(huán)境變量(可選) # ENV FLASK_APP=main.py # ENV FLASK_ENV=production # 運(yùn)行命令 CMD ["python", "app.py"]
3.創(chuàng)建.dockerignore文件
防止不必要的文件被復(fù)制到鏡像中,在根目錄下創(chuàng)建.dockerignore文件
__pycache__ *.pyc *.pyo *.pyd .Python env venv .venv .git .DS_Store
4.構(gòu)建Docker鏡像
docker build -t zhgc-tools .
5.運(yùn)行容器
docker run -d -p 5000:5000 --name zhgc-tools zhgc-tools
查看容器運(yùn)行情況,說明服務(wù)正常部署

6.方法補(bǔ)充
python 項(xiàng)目打包 docker鏡像
1.Dockerfile
這是創(chuàng)建容器的啟動(dòng)和編譯的腳本(項(xiàng)目?jī)?nèi)的文件路徑最好用全路徑)
# 將官方 Python 運(yùn)行時(shí)用作父鏡像
FROM python:3.8-alpine
# 設(shè)置時(shí)區(qū)
ENV TZ Asia/Shanghai
RUN apk --update add tzdata && \
cp /usr/share/zoneinfo/${TZ} /etc/localtime && \
echo ${TZ} > /etc/timezone && \
apk del tzdata
# 工程文件導(dǎo)入到容器中
ADD ./CloudSimPy-master /code
# 依賴文件導(dǎo)入
COPY requirements.txt ./
# 安裝 requirements.txt 中指定的任何所需軟件包
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 將工作目錄設(shè)置為 /myapps
WORKDIR /code
# 定義環(huán)境變量
ENV PYTHONPATH /code
# 在容器啟動(dòng)時(shí)運(yùn)行 app.py
CMD ["python", "/code/playground/Non_DAG/launch_scripts/state-makespan_list-50.py"]
2.requirements.txt
這是python 項(xiàng)目需要的依賴的版本對(duì)應(yīng)
simpy==3.0.11 tensorflow==1.12.0 numpy=1.15.3 pandas==0.23.4 colorlog
構(gòu)建鏡像
# 名稱必須小寫 docker build -t flask_redis_env0 .

導(dǎo)出編譯好的鏡像
經(jīng)過編譯沒有錯(cuò)誤后,可以將鏡像導(dǎo)出本地
# 打一個(gè)tag 方便后續(xù)load 時(shí)候有版本等相關(guān)信息 docker tag 7ed7399ab6fc wordhot:v1 # 打包一個(gè),f299f501774c 是對(duì)應(yīng)的 image id docker save f299f501774c > hangger_server.tar # 打包多個(gè) docker save -o images.tar postgres:9.6 mongo:3.4
導(dǎo)入鏡像
docker load < hangge_server.tar
到此這篇關(guān)于python項(xiàng)目打包成docker鏡像并運(yùn)行的完整指南的文章就介紹到這了,更多相關(guān)python打包成docker鏡像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django的用戶模塊與權(quán)限系統(tǒng)的示例代碼
這篇文章主要介紹了Django的用戶模塊與權(quán)限系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
django如何計(jì)算兩個(gè)TimeField的時(shí)差
在Django中,可以使用datetime模塊來計(jì)算兩個(gè)TimeField字段的時(shí)間差,下面通過示例代碼介紹django?計(jì)算兩個(gè)TimeField的時(shí)差,需要的朋友可以參考下2023-05-05
python 實(shí)現(xiàn)將Numpy數(shù)組保存為圖像
今天小編就為大家分享一篇python 實(shí)現(xiàn)將Numpy數(shù)組保存為圖像,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python 存儲(chǔ)字符串時(shí)節(jié)省空間的方法
這篇文章主要介紹了Python 存儲(chǔ)字符串時(shí)節(jié)省空間的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
python?include標(biāo)簽的使用方式及說明
這篇文章主要介紹了python?include標(biāo)簽的使用方式及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
python利用拉鏈法實(shí)現(xiàn)字典方法示例
這篇文章主要介紹了python利用拉鏈法實(shí)現(xiàn)字典的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友可以們下面來一起看看吧。2017-03-03
Python模仿POST提交HTTP數(shù)據(jù)及使用Cookie值的方法
這篇文章主要介紹了Python模仿POST提交HTTP數(shù)據(jù)及使用Cookie值的方法,通過兩種不同的實(shí)現(xiàn)方法較為詳細(xì)的講述了HTTP數(shù)據(jù)通信及cookie的具體用法,需要的朋友可以參考下2014-11-11
使用PyTorch實(shí)現(xiàn)去噪擴(kuò)散模型的完整代碼
在本文中,我們將深入研究DDPM的復(fù)雜性,涵蓋其訓(xùn)練過程,包括正向和逆向過程,并探索如何執(zhí)行采樣,在整個(gè)探索過程中,我們將使用PyTorch從頭開始構(gòu)建DDPM,并完成其完整的訓(xùn)練,需要的朋友可以參考下2024-01-01

