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

时间:2025-01-18 18:08:32

在现代 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,希望这篇文章能为你提供一个清晰的入门指南。如果你有任何问题或建议,欢迎在评论区留言!