【第五节】部署http接口到ubuntu server上的docker内

描述清楚需求,让deepseek帮我们写一个demo,文件结构如下

text 复制代码
FLASK_API_001
├── app.py
└── Dockerfile
└── requirements.txt

app.py

python 复制代码
from flask import Flask, jsonify, request

app = Flask(__name__)

# 根路由
@app.route('/')
def home():
    return "Welcome to Flask API!"

# GET请求示例
@app.route('/api/hello', methods=['GET'])
def hello():
    return jsonify({"message": "Hello, World!"})

# POST请求示例
@app.route('/api/echo', methods=['POST'])
def echo():
    data = request.get_json()
    return jsonify({"received_data": data}), 201

# 带参数的路由
@app.route('/api/user/<username>', methods=['GET'])
def show_user_profile(username):
    return jsonify({"username": username})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

Dockerfile,这个一串x代替的字符是我的id,这里不能放出来

bash 复制代码
# 使用官方Python镜像作为基础镜像
FROM xxxxxx.xuanyuan.run/python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 暴露端口(Flask默认端口)
EXPOSE 5000

# 定义启动命令
CMD ["python", "app.py"]

依赖文件requirements.txt

text 复制代码
flask==3.0.0

上传该文件夹到ubuntu server,通过截图看到上传失败,复制输出到deepseek,deepseek回答是因为权限的问题

使用ls -ld命令查看文件夹权限,可以看到归属权是root

bash 复制代码
zxd@server001:/home$ ls -ld
drwxr-xr-x 3 root root 4096 Jul  9 16:58 .

修改目录归属权,再次ls -ld的时候已经变成当前用户了

bash 复制代码
zxd@server001:~$ sudo chown -R zxd:zxd /home/zxd/NewFiler/
[sudo] password for zxd: 
zxd@server001:~$ ls -ld /home/zxd/NewFiler/
drwxr-xr-x 2 zxd zxd 4096 Jul 10 09:02 /home/zxd/NewFiler/
zxd@server001:~$ 

再次上传文件,可以看到文件已经在了

build镜像

bash 复制代码
docker build -t flask-api-001 .

运行容器,内外端口映射都是5000

bash 复制代码
docker run -d -p 5000:5000 --name flask-api-001 flask-api-001

至此我们已经成功将api部署到docker内了,现在我们去浏览器里请求看下返回结果

我们请求了helloworld接口,可以看到,返回的内容是正确的,我上文代码里写的一样的

写在最后,如果你没有解决上一节docker仓库的问题,那么这一节应该是进行不下去的,因为dockerfile里依然有拉取镜像的动作

下一节 我们安装一些工具简化项目的部署,像现在这样利用ftp 上传,手动敲命令构建可以帮助理解背后的原理,但这太低效了。

相关推荐
寻星探路2 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
王达舒19942 小时前
HTTP vs HTTPS: 终极解析,保护你的数据究竟有多重要?
网络协议·http·https
朱皮皮呀2 小时前
HTTPS的工作过程
网络协议·http·https
Binary-Jeff2 小时前
一文读懂 HTTPS 协议及其工作流程
网络协议·web安全·http·https
金刚猿5 小时前
01_虚拟机中间件部署_root 用户安装 docker 容器,配置非root用户权限
docker·中间件·容器
JH_Kong6 小时前
解决 WSL 中 Docker 权限问题:从踩坑到完整修复
docker·容器
忆~遂愿6 小时前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
神筆&『馬良』9 小时前
Foundation_pose在自己的物体上复现指南:实现任意物体6D位姿检测(利用realsense_D435i和iphone_16pro手机)
目标检测·ubuntu·机器人·视觉检测
70asunflower9 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
春日见10 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设