
5.1 项目准备:一个简单的Flask应用
我们创建一个简单的Flask应用,包含以下文件:
flask-demo/
├── app.py # 应用主文件
├── requirements.txt # 依赖列表
└── Dockerfile # Docker配置文件
app.py内容:
python
from flask import Flask
import redis
import os
app = Flask(__name__)
# 从环境变量获取Redis地址,默认localhost
redis_host = os.environ.get('REDIS_HOST', 'localhost')
r = redis.Redis(host=redis_host, port=6379, decode_responses=True)
@app.route('/')
def hello():
# 访问计数器
count = r.incr('hits')
return f'Hello World! I have been seen {count} times.'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
requirements.txt内容:
Flask==2.1.0
redis==4.3.0
5.2 编写Dockerfile
Dockerfile内容:
dockerfile
# 使用Python 3.9精简版作为基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装依赖
COPY requirements.txt .
RUN pip install -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动应用
CMD ["python", "app.py"]
5.3 构建和运行
5.3.1 构建镜像
bash
# 在flask-demo目录下执行
docker build -t flask-demo:1.0 .
5.3.2 运行容器
由于我们的应用依赖Redis,需要先启动Redis容器:
bash
# 启动Redis容器
docker run -d --name my-redis redis:alpine
# 启动Flask应用容器,链接到Redis容器
docker run -d -p 5000:5000 --name my-flask --link my-redis:redis flask-demo:1.0
5.3.3 验证部署
打开浏览器访问http://localhost:5000,应该能看到"Hello World! I have been seen X times."的页面,每次刷新数字都会增加。
5.4 优化改进
5.4.1 使用Docker Compose简化多容器部署
创建docker-compose.yml文件:
yaml
version: '3'
services:
redis:
image: redis:alpine
container_name: my-redis
flask:
build: .
image: flask-demo:1.0
container_name: my-flask
ports:
- "5000:5000"
environment:
- REDIS_HOST=my-redis
depends_on:
- redis
然后只需一条命令即可启动整个应用:
bash
docker-compose up -d
这个实战项目展示了如何将一个真实的应用通过Docker进行容器化部署,涵盖了镜像构建、容器运行、多容器协作等多个知识点。
下一章,我们将学习Docker Compose,它是管理多容器应用的强大工具。