Docker Compose 快速入门教程:构建Python+Redis计数器应用
docs Source repo for Docker's Documentation 项目地址: https://gitcode.com/gh_mirrors/docs3/docs
前言
Docker Compose 是容器编排的重要工具,它通过简单的YAML文件定义多容器应用的服务关系。本文将通过一个Python Flask与Redis结合的计数器应用,带你快速掌握Docker Compose的核心用法。
环境准备
在开始前,请确保:
- 已安装最新版Docker Compose
- 具备基本的Docker知识(镜像、容器等概念)
项目初始化
首先创建项目目录并初始化文件结构:
mkdir composetest && cd composetest
应用代码编写
创建app.py
文件,实现一个简单的计数器功能:
import time
import redis
from flask import Flask
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 exc:
if retries == 0:
raise exc
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'
代码特点:
- 使用Redis作为数据存储
- 实现了重试机制,增强应用健壮性
- 每次访问首页计数器自动递增
创建requirements.txt
声明依赖:
flask
redis
Docker镜像构建
编写Dockerfile
定义应用镜像:
FROM python:3.10-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt .
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run", "--debug"]
关键点说明:
- 基于轻量级Alpine Linux的Python镜像
- 设置Flask运行环境变量
- 安装编译依赖和Python包
- 暴露5000端口(Flask默认端口)
- 使用调试模式运行
定义多服务架构
创建compose.yaml
编排应用:
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
架构说明:
web
服务:基于当前目录构建镜像,端口映射8000→5000redis
服务:直接使用官方Redis镜像
启动应用
执行以下命令启动整个应用栈:
docker compose up
访问http://localhost:8000
即可看到计数器效果,每次刷新页面数字会增加。
开发模式优化
修改compose.yaml
启用文件监听:
services:
web:
build: .
ports:
- "8000:5000"
develop:
watch:
- action: sync
path: .
target: /code
redis:
image: "redis:alpine"
现在可以使用开发模式运行:
docker compose watch
特点:
- 代码修改后自动同步到容器
- 结合Flask调试模式实现热重载
- 无需手动重建镜像
项目结构优化
对于复杂项目,建议拆分服务定义:
- 创建
infra.yaml
存放基础设施服务:
services:
redis:
image: "redis:alpine"
- 修改主
compose.yaml
:
include:
- infra.yaml
services:
web:
build: .
ports:
- "8000:5000"
develop:
watch:
- action: sync
path: .
target: /code
常用命令参考
- 后台运行:
docker compose up -d
- 查看运行状态:
docker compose ps
- 停止服务:
docker compose stop
- 彻底清理:
docker compose down
- 查看日志:
docker compose logs
最佳实践建议
- 开发环境使用
watch
模式提升效率 - 生产环境移除调试参数
- 合理拆分Compose文件便于维护
- 为服务添加资源限制
- 使用命名卷持久化重要数据
总结
通过这个简单但完整的示例,我们实践了Docker Compose的核心功能:
- 多服务定义与编排
- 服务间网络通信
- 开发环境优化
- 项目结构组织
这为构建更复杂的容器化应用打下了坚实基础。
docs Source repo for Docker's Documentation 项目地址: https://gitcode.com/gh_mirrors/docs3/docs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考