📅  最后修改于: 2023-12-03 15:11:17.720000             🧑  作者: Mango
如果你正在使用 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 官方提供的 rabbitmq:3-alpine
镜像,同时为其设置了默认用户和密码。我们将容器的 5672
和 15672
端口映射到主机上,用于 AMQP 协议和 RabbitMQ 的 web 管理界面。
接着,我们定义了两个 Celery 服务,分别是 celery-worker
和 celery-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
命令来启动所有的服务。
这是一个非常简单且实用的示例,你可以根据自己的需求进行修改和扩展。