- 使用 Docker Compose 运行一个简单的 Python Web应用程序。
- 该应用程序使用 Flask 框架,并在 Redis 中维护一个计数器。
【1】使用 Compose 容器运行 Flask 项目
-
新建一个项目目录,在该项目中创建虚拟环境
- windows 系统
powershell# 查看python 版本 python --version # 或 py --version # 创建虚拟环境 python -m venv .venv # 或 py -m venv .venv -
激活虚拟环境
- windows系统
powershell.venv\Scripts\activate- 当命令提示符前显示虚拟环境名称,表示激活成功
powershell(.venv) PS D:/edu-flask> -
安装 Flask
-
激活虚拟环境后,使用下面的命令来安装 Flask:
powershell# pip install flask==3.1.2 可以指定flask版本为 3.1.2 (.venv) PS D:/edu-flask> pip install flask
-
项目根目录中创建 app.py 文件
powershellfrom flask import Flask import redis import time app = Flask(__name__) cache = redis.Redis(host="redis", port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr("hits") except redis.exceptions.ConnectionError as e: if retries == 0: raise e retries -= 1 time.sleep(0.5) @app.route("/") def hello(): count = get_hit_count() return f"Hello, World! I have been seen {count} times.\n" -
在项目根目录下创建 requirements.txt 文件,文件内容如下
- 列出 Python 项目需要的所有第三方库,方便统一安装。
- 在 Dockerfile 中通过 pip install -r requirements.txt 自动安装所有依赖。
powershellflask redis -
在项目根目录下创建 Dockerfile 文件,文件内容如下
- 描述如何从零构建一个自定义的 Docker 镜像
powershellFROM python:3.7-alpine WORKDIR /code # 环境变量:指定 Flask 主文件 ENV FLASK_APP=app.py # 环境变量:Flask 监听地址 ENV FLASK_RUN_HOST=0.0.0.0 COPY requirements.txt requirements.txt # 安装 python 依赖 RUN pip install -r requirements.txt EXPOSE 5000 COPY . . # 运行 Flask 应用 CMD ["flask", "run"] -
在项目根目录下创建 compose.yml 文件,文件内容如下
- 定义和管理多个容器(服务),让它们可以一键启动、停止、互相通信。
powershell# Compose 文件版本 version: '3.9' # 定义服务(容器) services: # 第一个服务:我们的 Flask 应用 web: # 从当前目录构建镜像 # . 就是指 compose.yml 所在的当前目录 , # Docker 会在该目录下找 Dockerfile 来构建镜像。 build: . # 端口映射:宿主机5000 -> 容器5000 ports: - 5000:5000 # 第二个服务:Redis # 从镜像 redis:alpine 构建 redis: image: redis:alpine -
在项目的根目录下执行如下命令,启动项目
- 执行下面命令后,将会找到
compose.yml文件开始执行 - 根据
compose.yml文件会找到Dockerfile文件(根据build: .),然后执行Dockerfile文件,构建 web 镜像 Dockerfile文件执行完之后,重新回到compose.yml文件拉取 redis 镜像,完成之后启动web(Flask) 和 redis 容器
powershelldocker compose up - 执行下面命令后,将会找到
-
项目启动后,在浏览器上输入
http://localhost:5000/,可以看到页面有对应的信息
【2】挂载本地项目到Docker中
- 在代码开发阶段,我们可以将本地的代码挂载到Docker中,修改本地的代码可以实时预览修改的结果
-
修改
compose.yml文件,添加volumes- volumes 指定项目目录映射到容器的
/code目录,当修改项目代码时,可以随时看到,而不用重新构建镜像。 - 同时也设置了
environment,FLASK_ENV=development该环境变量指示flask run要在开发模式下运行并在更改代码时重新加载代码。此模式只能在开发中使用。
powershell# Compose 文件版本 version: '3.9' # 定义服务(容器) services: # 第一个服务:我们的 Flask 应用 web: # 从当前目录构建镜像 # . 就是指 compose.yml 所在的当前目录 , # Docker 会在该目录下找 Dockerfile 来构建镜像。 build: . # 端口映射:宿主机5000 -> 容器5000 ports: - 5000:5000 # 挂载当前目录为容器内 /code 目录 volumes: - ./:/code # 环境变量:指定 Flask 环境为开发模式 environment: - FLASK_ENV=development # 第二个服务:Redis # 从镜像 redis:alpine 构建 redis: image: redis:alpine - volumes 指定项目目录映射到容器的
-
重新启动项目
powershell# docker compose up -d 表示在后台启动服务 docker compose up -
可以在容器中的web服务下的 files 中的 code 文件夹上看到
MOUNT,表示挂载成功

-
我们可以修改一下本地代码
app.py文件,然后刷新浏览器,可以看到新修改的代码信息。