摘要:以下是一份详细的Flask Docker Demo 项目指南,帮助你快速搭建一个容器化的 Flask 应用。
以下是一份详细的 Flask Docker Demo 项目指南,帮助你快速搭建一个容器化的 Flask 应用。
1. 项目目标
创建一个简单的 Flask 应用,并使用 Docker 将其容器化,实现以下功能:
运行一个返回 "Hello, Dockerized Flask!" 的 API通过 Docker Compose 管理容器化服务可选的扩展:添加 Redis 作为缓存服务2. 环境准备
安装 Docker安装 Docker Compose(通常包含在 Docker Desktop 中)Python 3.x(本地开发可选)3. 项目结构
bash
flask-docker-demo/
├── app/
│ ├── __init__.py
│ └── routes.py
├── requirements.txt
├── Dockerfile
└── docker-compose.yml
4. 分步实现
步骤 1: 创建 Flask 应用
新建项目目录并进入:bash
mkdir flask-docker-demo && cd flask-docker-demo
创建 app 目录和代码文件:python
# app/__init__.py
from flask import Flask
app = Flask(__name__)
from app import routes
python
# app/routes.py
from app import app
@app.route('/')
def hello:
return "Hello, Dockerized Flask!"
生成依赖文件 requirements.txt:txt
Flask==3.0.0
步骤 2: 编写 Dockerfile
dockerfile
# 使用官方 Python 基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动命令
CMD ["flask", "run", "--host=0.0.0.0"]
步骤 3: 构建并运行 Docker 镜像
bash
# 构建镜像
docker build -t flask-docker-demo .
# 运行容器(映射端口 5000)
docker run -p 5000:5000 flask-docker-demo
访问 查看结果。
5. 使用 Docker Compose
创建 docker-compose.yml:yaml
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
environment:
- FLASK_DEBUG=1
启动服务:bash
docker-compose up --build
6. 扩展:添加 Redis 缓存
修改 docker-compose.yml:yaml
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
environment:
- FLASK_DEBUG=1
depends_on:
- redis
redis:
image: "redis:alpine"
ports:
- "6379:6379"
更新 Flask 代码使用 Redis:python
# routes.py
from flask import Flask
import redis
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
@app.route('/visits')
def visits:
count = cache.incr('visits')
return f"Total visits: {count}"
更新 requirements.txt:txt
Flask==3.0.0
redis==4.5.5
7. 常用命令
bash
# 停止并删除容器
docker-compose down
# 查看运行中的容器
docker ps
# 查看容器日志
docker-compose logs web
# 进入容器 Shell
docker exec -it /bin/bash
8. 常见问题
端口冲突:确保主机端口(如 5000)未被其他程序占用依赖安装失败:检查 requirements.txt 格式是否正确容器间通信问题:使用 Docker Compose 的服务名(如 redis)作为主机名缓存问题:构建时添加 --no-cache 参数重建镜像:bash
docker-compose build --no-cache
9. 项目仓库示例
完整代码参考:GitHub Flask-Docker-Demo(虚构链接)
通过本指南,您已掌握如何将 Flask 应用 Docker 化,并实现多容器协作。下一步可探索:
Docker 网络配置数据卷持久化存储CI/CD 管道集成Kubernetes 部署来源:老客数据一点号