📜  用于烧瓶 celery rabbitmq 的 docker-compose.yml - Python (1)

📅  最后修改于: 2023-12-03 15:11:17.720000             🧑  作者: Mango

用于烧瓶 celery rabbitmq 的 docker-compose.yml - Python

如果你正在使用 Python 进行开发,那么你很可能会使用 Celery 与 RabbitMQ 来处理后台任务或者消息队列。 docker-compose 是一个非常方便的工具,可以轻松启动多个 Docker 容器,包括 RabbitMQ 和 Celery。

下面是一个使用 docker-compose 启动 RabbitMQ 和 Celery 的示例 docker-compose.yml 文件:

version: '3.8'

services:
  rabbitmq:
    image: rabbitmq:3-alpine
    hostname: rabbitmq
    environment:
      RABBITMQ_DEFAULT_USER: guest
      RABBITMQ_DEFAULT_PASS: guest
    ports:
      - '5672:5672'
      - '15672:15672'

  celery-worker:
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - rabbitmq
    environment:
      CELERY_BROKER_URL: 'amqp://guest:guest@rabbitmq:5672'
      CELERY_RESULT_BACKEND: 'redis://redis:6379/0'
    command: celery -A myapp worker --loglevel=INFO

  celery-beat:
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - rabbitmq
      - celery-worker
    environment:
      CELERY_BROKER_URL: 'amqp://guest:guest@rabbitmq:5672'
      CELERY_RESULT_BACKEND: 'redis://redis:6379/0'
    command: celery -A myapp beat --loglevel=INFO

  redis:
    image: redis:5-alpine
    hostname: redis
    ports:
      - '6379:6379'

在上面的示例文件中,我们定义了四个服务:

  • rabbitmq:RabbitMQ 消息队列服务
  • celery-worker:Celery worker 任务服务
  • celery-beat:Celery beat 定时任务服务
  • redis:用于 Celery 的结果记录和状态更新的 Redis 服务

首先,我们定义 RabbitMQ 服务,使用 RabbitMQ 官方提供的 rabbitmq:3-alpine 镜像,同时为其设置了默认用户和密码。我们将容器的 567215672 端口映射到主机上,用于 AMQP 协议和 RabbitMQ 的 web 管理界面。

接着,我们定义了两个 Celery 服务,分别是 celery-workercelery-beat。它们都需要依赖 RabbitMQ 服务,因此使用了 depends_on 属性来指定依赖关系。同时,我们指定了 environment 属性,设置了 RabbitMQ 和 Redis 的连接 URL。

最后,我们定义了一个 Redis 服务,用于 Celery 的结果存储。我们使用 Redis 官方提供的 redis:5-alpine 镜像,并将容器的 6379 端口映射到主机上。

在每个 Celery 的服务配置中,我们都使用了 build 属性,指定了当前目录下的 Dockerfile 文件来构建 Docker 镜像。我们使用了根目录下的 myapp Python 包来运行 Celery 任务和定时任务。

最后,我们可以通过运行 docker-compose up 命令来启动所有的服务。

这是一个非常简单且实用的示例,你可以根据自己的需求进行修改和扩展。