Docker Compose 快速入门教程:构建Python+Redis计数器应用

Docker Compose 快速入门教程:构建Python+Redis计数器应用

docs Source repo for Docker's Documentation docs 项目地址: https://gitcode.com/gh_mirrors/docs3/docs

前言

Docker Compose 是容器编排的重要工具,它通过简单的YAML文件定义多容器应用的服务关系。本文将通过一个Python Flask与Redis结合的计数器应用,带你快速掌握Docker Compose的核心用法。

环境准备

在开始前,请确保:

  1. 已安装最新版Docker Compose
  2. 具备基本的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→5000
  • redis服务:直接使用官方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调试模式实现热重载
  • 无需手动重建镜像

项目结构优化

对于复杂项目,建议拆分服务定义:

  1. 创建infra.yaml存放基础设施服务:
services:
  redis:
    image: "redis:alpine"
  1. 修改主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

最佳实践建议

  1. 开发环境使用watch模式提升效率
  2. 生产环境移除调试参数
  3. 合理拆分Compose文件便于维护
  4. 为服务添加资源限制
  5. 使用命名卷持久化重要数据

总结

通过这个简单但完整的示例,我们实践了Docker Compose的核心功能:

  • 多服务定义与编排
  • 服务间网络通信
  • 开发环境优化
  • 项目结构组织

这为构建更复杂的容器化应用打下了坚实基础。

docs Source repo for Docker's Documentation docs 项目地址: https://gitcode.com/gh_mirrors/docs3/docs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郎沙圣Sebastian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值