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

1.創(chuàng)建requirements.txt
在項(xiàng)目根目錄下創(chuàng)建requirements.txt文件,用于記錄項(xiàng)目運(yùn)行所需的所有第三方庫及其精確版本。
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)目內(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)目需要的依賴的版本對應(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 是對應(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中Numpy與TensorFlow版本兼容問題完美解決辦法
這篇文章主要給大家介紹了關(guān)于Python中Numpy與TensorFlow版本兼容問題的完美解決辦法,確保Python版本與TensorFlow版本兼容是首要任務(wù),因?yàn)椴患嫒莸慕M合可能導(dǎo)致導(dǎo)入錯(cuò)誤或其他運(yùn)行時(shí)問題,需要的朋友可以參考下2024-07-07
Python數(shù)據(jù)持久化shelve模塊用法分析
這篇文章主要介紹了Python數(shù)據(jù)持久化shelve模塊用法,結(jié)合實(shí)例形式較為詳細(xì)的總結(jié)分析了shelve模塊的功能、原理及簡單使用方法,需要的朋友可以參考下2018-06-06
Window系統(tǒng)下Python如何安裝OpenCV庫
這篇文章主要介紹了Window系統(tǒng)下Python如何安裝OpenCV庫,本文分步驟給大家介紹的詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
python整小時(shí) 整天時(shí)間戳獲取算法示例
今天小編就為大家分享一篇python整小時(shí) 整天時(shí)間戳獲取算法示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02

