背景需求:在Windows系统编写了简单的python代码,希望能通过docker打包到Linux Ubuntu系统中,并运行起来,并且希望在本地Windows系统中能通过postman访问。
目录
一、原本的python代码
二、创建一个简单的Flask应用程序
三、创建requirements.txt文件
四、编写 Dockerfile
五、编译并导出镜像文件
5.1 指定架构编译
5.2 导出镜像文件
六、服务器运行
6.1 导入镜像
6.2 映射容器端口到宿主机端口
七、Windows系统通过postman远程访问
一、原本的python代码
在本地pycharm中编写一条简单的python代码,假如说只是一条打印语句,现在我们希望在Linux服务器上运行,并且可以由其他用户远程访问,决定打印的内容。
# 打印一条简单的消息
print("Hello, World!")
文件名就叫作testweb.py,放在python项目中的uni目录里
二、创建一个简单的Flask应用程序
改写testweb.py文件,想让其他人能够通过 Web 请求调用 Python 程序,需要将程序改造成一个 Web 服务,并明确指定监听的端口。可以使用 Flask 或其他 Web 框架来实现这一点。这里使用Flask框架。
from flask import Flask, request, jsonifyapp = Flask(__name__)@app.route('/hello', methods=['POST'])
def hello():data = request.get_json()message = data.get('message', 'No message provided')print(f"Received message: {message}")return jsonify({'response': f'Hello, {message}'})if __name__ == '__main__':app.run(host='0.0.0.0', port=8000)
三、创建requirements.txt文件
文件当中要有运行程序所需要的python库,这里我只用到了flask,所以可以简单编写并放在uni目录下
requirements.txt文件内容(程序简单,只用到了Flask)
Flask
也可以在文件中指定版本比如(Flask==3.03)
四、编写 Dockerfile
参考我的文件结构
# 使用Python 3作为基础镜像 FROM python:3.10.0# 设置工作目录 WORKDIR /app# 复制项目文件到容器中 COPY uni /app/uni# 安装项目依赖项 RUN pip install -r uni/requirements.txt# 暴露端口 EXPOSE 8000# 定义容器启动命令 CMD ["python3", "uni/testweb.py" ]
配置说明:
FROM python:
3.10.0 我使用的python版本为3.10.0WORKDIR /app
app为工作目录文件,名字随意取即可,注意要和下面的保持一致EXPOSE 8000
Linux服务器上要运行在8000端口(可由自己决定)["python3", "uni/run.py" ]
python项目的启动程序为uni文件夹下面的run.py
五、编译并导出镜像文件
在当前目录终端中运行如下命令
docker build -t image_name .
image_name是镜像名称,自己随意取
5.1 指定架构编译
在一些linux系统,比如centos中,不支持arm64架构,所以需要指明为amd64,不然会报错
docker buildx build --platform linux/amd64 -t image_name:1.0 .
5.2 导出镜像文件
运行下面命令就可以导出
docker save -o save_name.tar image_name
成功后可在当前项目根目录下看到.tar文件 (llmchain是我自己取的文件名)
六、服务器运行
6.1 导入镜像
将tar文件转到Linux系统中,在当前目录终端运行如下命令
docker load -i llmchain.tar
可以通过下面命令查看是否导入成功
docker images
6.2 映射容器端口到宿主机端口
运行如下命令
docker run -d --name llmchain -p 8000:8000 llmchain
可通过下面命令检验是否已运行
docker ps
七、Windows系统通过postman远程访问
上面步骤都成功进行之后,现在你的 Flask 应用程序应该在 Docker 容器中运行,可以在Windows系统上运行postman
访问:http://服务器ip+端口 /hello
这里以我的postman截图
以下是在 Postman 中设置请求的详细步骤
- 在 URL 输入框中输入
http://服务器ip:8000/hello
- 在
Body
选项卡中选择raw
并选择JSON
, - 下面输入 JSON 请求体
- 点击
Send
按钮
即可获得从Linux服务器上传来的响应。