python项目通过docker部署到Linux系统并实现远程访问

背景需求:在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, jsonify

app = 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,所以可以简单编写

<think>嗯,用户想了解如何使用Docker打包Python项目部署Linux服务器。首先,我需要整理一下步骤,确保覆盖从准备项目到构建镜像再到部署的全过程。 首先,用户可能需要知道项目结构该怎么组织。根据引用[5],Dockerfile通常放在项目根目录,ADD指令将项目代码添加到镜像中的/code目录。所以应该建议用户把项目文件整理好,比如把代码放在pdf_reader这样的子目录里,然后在Dockerfile里添加进去。 然后,编写Dockerfile是关键步骤。需要选择合适的基础镜像,比如Python的官方镜像,比如python:3.12.4-alpine,这个在引用[2]提到过。Alpine镜像比较小,适合生产环境。接下来,设置工作目录,复制项目文件,安装依赖,这些步骤在引用[5]的Dockerfile示例里有体现。比如使用WORKDIR /code,然后ADD或者COPY命令复制代码,再运行pip install -r requirements.txt。 接下来是构建镜像的命令,用户可能不太清楚应该怎么操作。根据引用[1],使用docker build -t镜像名 . 在项目根目录执行。这里需要提醒用户注意命令中的最后一个点,表示当前目录。 部署Linux服务器的话,用户可能想知道如何传输镜像。可能需要使用docker save和docker load,或者推送到镜像仓库再从服务器拉取。这部分需要详细说明,因为用户可能没有私有仓库,所以直接保存为文件再上传可能更直接。 另外,用户可能有远程访问的需求,如引用[3]提到的在Windows通过postman访问部署Linux的服务。这时候需要说明如何映射端口,比如使用-p参数将容器的端口映射到宿主机。例如,docker run -p 5000:5000镜像名。 还需要注意依赖管理,确保requirements.txt正确,避免遗漏包。可能还需要解释为什么使用Docker,如引用[4]提到的环境隔离和可移植性,让用户明白Docker的优势。 用户可能遇到的问题包括Dockerfile的语法错误,路径问题,或者依赖安装失败。比如,如果requirements.txt里的包版本不兼容,或者Dockerfile里路径不对,导致找不到文件。这时候需要建议用户检查这些地方,或者提供调试方法,比如进入容器内部查看。 最后,生成相关问题的时候,要考虑用户可能进一步的问题,比如如何优化镜像大小,多阶段构建,或者如何处理静态文件。这些可以帮助用户深入了解更多Docker的使用技巧。</think>### 使用Docker打包Python项目部署Linux服务器的分步指南 #### 一、项目结构准备 1. **目录结构规范** 建议项目目录包含以下内容: ``` /project_root ├── app/ # Python源代码目录 ├── requirements.txt # 项目依赖清单 ├── Dockerfile # Docker构建文件 └── entrypoint.sh # 启动脚本(可选) ``` 引用[5]中的示例表明,通过`ADD`指令将本地代码复制到镜像中,例如: ```dockerfile ADD ./pdf_reader /code ``` #### 二、编写Dockerfile 2. **基础镜像选择** 优先使用官方Python镜像,推荐Alpine版本以减小体积: ```dockerfile FROM python:3.12.4-alpine ``` 3. **依赖安装与代码复制** 通过分层构建优化缓存利用: ```dockerfile WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . ``` 4. **容器启动配置** 设置容器入口点: ```dockerfile CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"] ``` #### 三、镜像构建与验证 5. **构建镜像命令** 在项目根目录执行(注意最后的`.`符号): ```bash docker build -t my-python-app:v1 . ``` 该命令对应引用[1]中的`docker build -t opendrop .`模式 6. **本地测试运行** 映射端口验证功能: ```bash docker run -p 5000:5000 my-python-app:v1 ``` 引用[3]提到的远程访问需求可通过此端口映射实现 #### 四、部署Linux服务器 7. **镜像传输方案** - **方案1:直接保存/加载** ```bash docker save my-python-app:v1 > app.tar scp app.tar user@server:/path ssh user@server docker load < app.tar ``` - **方案2:镜像仓库推送** ```bash docker tag my-python-app:v1 registry.example.com/myapp:v1 docker push registry.example.com/myapp:v1 ``` 8. **服务器端运行** 使用生产级参数启动: ```bash docker run -d \ --restart=always \ -p 80:5000 \ -v /data/logs:/app/logs \ my-python-app:v1 ``` #### 五、关键优化实践 - **多阶段构建**(减小最终镜像体积): ```dockerfile # 构建阶段 FROM python:3.12 as builder RUN pip install --user -r requirements.txt # 运行阶段 FROM python:3.12-alpine COPY --from=builder /root/.local /root/.local ``` - **安全增强**: ```dockerfile RUN adduser -D appuser && chown -R appuser /app USER appuser ``` #### 六、调试技巧 - 进入运行中的容器: ```bash docker exec -it <container_id> sh ``` - 查看实时日志: ```bash docker logs -f <container_id> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丹牛Daniel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值