Python项目 部署Docker

1.打开Anaconda Powershell Prompt(Anaconda3)

2.cd到项目目录下

cd D:\PythonProject\Curve-master

3.输入命令

pip freeze > requirements.txt

此时在项目根目录下生成了requirements.txt文件

4.输入命令

pip list --format=freeze > ./requirements.txt

此时替换了原本requirements.txt文件中指向本地的路径 替换为版本号

在Docker服务器中

5.创建Dockerfile文件如下

# Dockerfile
FROM python:3.8.5
​
# 设置标签,标记此镜像的作者信息。
LABEL authors="123"
​
# 将当前目录的内容复制到容器内的 /app/ 目录下。
COPY ./app /app
# 设置工作目录为 /app。
WORKDIR /app
​
# 复制 requirements.txt 文件到容器内的当前工作目录。
COPY ./requirements.txt .
​
# 配置 pip 使用阿里云的 Python 包索引服务器。
RUN pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/
RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
​
# 安装依赖项,从 requirements.txt 文件中读取需要安装的包列表。
RUN pip install -r requirements.txt
​
# 暴露端口 5000,使得容器内运行的服务可以通过这个端口访问。
EXPOSE 5000
​
# 设置容器启动后执行的默认命令,这里是指定运行 app.py 文件。
ENTRYPOINT [ "python", "./app.py" ]

6.将需要上传的项目拖进文件夹 重命名为app

 容器内文件目录如下

python
    app(文件夹 上传的python项目代码)
    Dockerfile
    requirements.txt

7.cd到项目根目录下执行命令 打包镜像(时间较长 根据项目依赖多少而定)

docker build -t signal-python:v1.0 .

8.运行容器

docker run -d -p 5000:5000 signal-python:v1.0

如果代码涉及获取时间戳    则将本机时间映射到容器

docker run -d -p 5000:5000 -v /etc/localtime:/etc/localtime:ro signal-python:v1.0

#常用docker代码

1.查看当前服务器中的所有镜像

docker images

2.查看当前服务器正在运行的容器

docker ps

查看所有容器 (包括运行失败 自动停止的)

docker ps -a

3.删除容器

docker rm -f ae1(docker ps查看的容器id前三位)

4.删除镜像

docker rmi -f ae1(docker images查看的镜像id前三位)

#报错问题

打包镜像过程中遇到的问题

1.服务器内存不足

Python项目部署需要下载许多环境配置文件 一般需要较大内存

在Docker服务器上使用如下代码查看服务器内存是否足够 

df -h

若内存占比达到90%以上 需要清理服务器构建缓存

2.Python版本与依赖版本不匹配

打开上传到服务器的依赖配置文件

将一些服务器运行时用不到的依赖可以注释掉 例如

#conda==4.14.0
#conda-build==3.20.5
#conda-package-handling==1.7.2
#menuinst==1.4.16

可以减少依赖下载保存及下载内存

其余报错需要仔细查看报错内容 将依赖配置修改为系统合适的版本号

注意Dockerfile中的python版本号需要与本地调试运用的python版本号相同 这样生成的依赖版本不匹配问题在部署到服务器时只有极少数

3.部署超时

由于Python项目依赖下载时间过长导致镜像打包失败的情况

调整后将Dockerfile文件修改为如下

FROM python:3.8.5

# 设置标签,标记此镜像的作者信息
LABEL authors="123"

# 设置环境变量,确保容器内部使用UTF-8编码
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8

# 将当前目录的内容复制到容器内的 /app 目录下
COPY ./app /app

# 设置工作目录为 /app
WORKDIR /app

# 配置 pip 使用阿里云的 Python 包索引服务器
RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

# 确保 pip 更新到最新版本
RUN pip install --upgrade pip==24.2

# 将 requirements.txt 复制到容器内
COPY ./requirements.txt /app/requirements.txt

# 安装依赖
RUN pip install -r /app/requirements.txt --timeout=1200

# 检查 Python 版本
RUN python --version

# 暴露端口 5000,使得容器内运行的服务可以通过这个端口访问
EXPOSE 5000

# 设置容器启动后执行的默认命令,启动 Flask 应用
ENTRYPOINT ["python", "./app.py"]

部署成功后运行报错

1.容器启动不成功

通常是本地的依赖环境在部署到服务器时没有下载完全

注意更新了本地Python代码后需要仔细查看是否有新添加的依赖项 需要更新服务器的依赖配置

2.启动成功 有部分Flask端口运行不了

如果本地所有端口都调试成功 而服务器部署后调试不成功 

则是由于本地环境与服务器环境不一致 不需要再修改本地代码

而是需要检查后重新打包镜像

主要检查以下几个方面:

①本地python版本与服务器python版本是否一致

②服务器的依赖项与本地是否一致  在打包镜像时是否误删 是否注释掉了代码运行时需要使用的镜像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值