当前位置: 首页 > news >正文

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

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

FLASK_API_001
├── app.py
└── Dockerfile
└── requirements.txt

app.py

from flask import Flask, jsonify, requestapp = 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,这里不能放出来

# 使用官方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"]

依赖文件

flask==3.0.0

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

在这里插入图片描述

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

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

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

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镜像

docker build -t flask-api-001 .

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

docker run -d -p 5000:5000 --name flask-api-001 flask-api-001

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

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

在这里插入图片描述

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

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

http://www.lryc.cn/news/586003.html

相关文章:

  • Eplan API Scripts
  • Transforms
  • Spring Boot 整合 OAuth2 详细教程(适用于 2025 年 Spring Boot 3.x)
  • 力扣-19. 删除链表的倒数第N个节点
  • 什么是 Bootloader?怎么把它移植到 STM32 上?
  • 【6.1.3 漫画分布式锁】
  • 线程属性设置全攻略
  • 14. 请谈一下浏览器的强缓存和协商缓存
  • 9.2 埃尔米特矩阵和酉矩阵
  • Pandas 模块之数据的读取
  • arcgis投影后数据显示问题记录
  • 非程序员如何用 AI 提升日常工作效率:以产品经理为例的落地实践指南
  • error while loading shared libraries
  • 小架构step系列12:单元测试
  • [爬虫实战] 多进程/多线程/协程-异步爬取豆瓣Top250
  • Pytest 跳过测试技巧:灵活控制哪些测试该跑、哪些该跳过
  • linux系统mysql性能优化
  • H2在springboot的单元测试中的应用
  • 多 Agent 强化学习实践指南(一):CTDE PPO 在合作捕食者-猎物游戏中的应用详解
  • 引入了模块但没有使用”,会不会被打包进去
  • 【C++小白逆袭】内存管理从崩溃到精通的秘籍
  • c++反射实现
  • 张量数值计算
  • 跨系统开发代码换行符如何解决
  • 每日一SQL 【销售分析 III】
  • 试用了10款翻译软件后,我只推荐这一款!完全免费还超好用
  • 大模型KV缓存量化误差补偿机制:提升推理效率的关键技术
  • Qt6中出现 OpenCV(4.10.0) Error: Assertion failed
  • 第10讲——一元函数积分学的几何应用
  • 创建 UIKit 项目教程