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版本是否一致
②服务器的依赖项与本地是否一致 在打包镜像时是否误删 是否注释掉了代码运行时需要使用的镜像