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

从零到一:用 Flask 和 Docker 构建并部署一个简单的接口请求页面

在现代 Web 开发中,快速构建和部署 API 接口是一个非常重要的技能。Flask 作为一个轻量级的 Python Web 框架,非常适合用来快速开发 RESTful API。而 Docker 则可以帮助我们将应用容器化,实现跨平台部署和运行。本文将带你从零开始,用 Flask 编写一个简单的接口请求页面,并通过 Dockerfile 将其容器化部署。


1. 项目概述

我们将实现以下功能:

  1. 一个简单的 Flask 应用,提供两个接口:
    • GET 请求接口:接收一个参数 name,返回问候语。
    • POST 请求接口:接收 JSON 数据,返回接收到的数据。
  2. 使用 Docker 将应用容器化,方便部署和运行。

2. 开发 Flask 应用

2.1 创建项目结构

首先,创建一个项目目录,并初始化文件结构:

flask-docker-demo/
├── app.py
├── requirements.txt
└── Dockerfile

2.2 编写 Flask 应用代码

app.py 中编写以下代码:

from flask import Flask, request, jsonify

app = Flask(__name__)

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

# 简单 GET 请求接口
@app.route('/api/get', methods=['GET'])
def get_data():
    name = request.args.get('name', 'Guest')
    return jsonify({"message": f"Hello, {name}!"})

# 简单 POST 请求接口
@app.route('/api/post', methods=['POST'])
def post_data():
    data = request.json
    if not data:
        return jsonify({"error": "No data provided"}), 400
    return jsonify({"received_data": data})

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

2.3 创建依赖文件

requirements.txt 中列出 Flask 的依赖:

Flask==3.0.3

3. 容器化 Flask 应用

3.1 编写 Dockerfile

在项目根目录下创建 Dockerfile,内容如下:

# 使用官方 Python 3.8 镜像作为基础镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

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

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

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 5000

# 启动应用
CMD ["python", "app.py"]

3.2 构建 Docker 镜像

在项目根目录下运行以下命令,构建 Docker 镜像:

docker build -t flask-app .

3.3 运行 Docker 容器

使用以下命令运行容器:

docker run -d -p 5000:5000 --name my-flask-app flask-app
  • -d:后台运行容器。
  • -p 5000:5000:将主机的 5000 端口映射到容器的 5000 端口。
  • --name my-flask-app:为容器指定名称。

4. 测试接口

4.1 GET 请求测试

打开浏览器或使用 curl 测试 GET 接口:

curl "http://localhost:5000/api/get?name=John"

响应示例

{
  "message": "Hello, John!"
}

4.2 POST 请求测试

使用 curl 测试 POST 接口:

curl -X POST -H "Content-Type: application/json" -d '{"key": "value"}' http://localhost:5000/api/post

响应示例

{
  "received_data": {
    "key": "value"
  }
}

5. 停止和删除容器

如果需要停止或删除容器,可以使用以下命令:

# 停止容器
docker stop my-flask-app

# 删除容器
docker rm my-flask-app

6. 推送 Docker 镜像到仓库(可选)

如果需要将镜像推送到 Docker Hub 或其他容器仓库,可以按照以下步骤操作:

  1. 登录 Docker Hub:

    docker login
    
  2. 为镜像打标签:

    docker tag flask-app your-dockerhub-username/flask-app:latest
    
  3. 推送镜像:

    docker push your-dockerhub-username/flask-app:latest
    

7. 总结

通过本文,我们完成了一个简单的 Flask 应用的开发,并使用 Docker 将其容器化部署。这种方法不仅适合本地开发和测试,还可以轻松扩展到生产环境。Flask 的简洁性和 Docker 的便携性相结合,为开发者提供了高效、灵活的开发和部署体验。

如果你正在学习 Flask 或 Docker,希望这篇文章能为你提供一个清晰的入门指南。如果你有任何问题或建议,欢迎在评论区留言!


http://www.kler.cn/a/504164.html

相关文章:

  • 八股学习 Redis
  • 《使用 YOLOV8 和 KerasCV 进行高效目标检测》
  • C#学习笔记 --- 简单应用
  • 数据结构(Java版)第八期:LinkedList与链表(三)
  • 【Python】数据容器:列表,元组,字符串,集合字典及通用操作
  • 单体 vs 微服务 怎么选?
  • SpringData-Redis缓存之RedisTemplate
  • 使用 OpenSSL 实现 SSL/TLS 握手的流程和 Demo 示例
  • 从玩具到工业控制--51单片机的跨界传奇【2】
  • 运维练习题2
  • STORM:从多时间点2D图像中快速重建动态3D场景的技术突破
  • WordPress如何配置AJAX以支持点击加载更多?
  • GPT(General Purpose Timer)定时器
  • 【STM32-学习笔记-2-】外部中断
  • 元素隐式具有 “any“ 类型,因为类型为 “string“ 的表达式不能用于索引类型
  • sympy常用函数与错误笔记
  • 高级java每日一道面试题-2025年01月14日-框架篇[Spring篇]-Spring框架的事务管理有哪些优点?
  • ETL 数据抽取
  • ElectronSharp,.Net跨平台的多一种选择
  • 如何查看gitlab mr labels 添加和删除的历史
  • Photoshop快速无痕去除照片海报中的文字logo
  • 软件测试之单元测试总结
  • Java 面试中的高频算法题详解
  • WordPress开发进群V2主题,多种引流方法,引私域二次变现
  • TinyML中的去中心化资源共享:无线双层Gossip并行随机梯度下降用于协作学习
  • React:构建用户界面的JavaScript库