Airflow Docker Compose
Airflow Docker Compose[编辑 | 编辑源代码]
Airflow Docker Compose 是一种利用 Docker 和 Docker Compose 技术快速部署 Apache Airflow 的方法,适合开发、测试和生产环境。通过容器化技术,用户可以避免复杂的依赖配置,快速搭建可扩展的 Airflow 环境。本指南将详细介绍如何使用 Docker Compose 部署 Airflow,并涵盖常见配置和优化技巧。
介绍[编辑 | 编辑源代码]
Apache Airflow 是一个开源的工作流编排工具,用于调度和监控数据处理流水线。传统的 Airflow 部署需要手动安装数据库(如 PostgreSQL 或 MySQL)、消息队列(如 Redis 或 RabbitMQ)以及 Airflow 本身的组件(如 Scheduler、Web Server 和 Worker)。而使用 Docker Compose,可以通过预定义的 YAML 文件一键启动所有服务,极大简化部署流程。
Docker Compose 允许用户定义多容器应用,并通过单个命令管理它们的生命周期。Airflow 官方提供了标准的 `docker-compose.yaml` 文件,用户可以直接使用或根据需求自定义。
准备工作[编辑 | 编辑源代码]
在开始之前,请确保已安装以下工具:
- Docker(版本 20.10+)
- Docker Compose(版本 1.29+)
验证安装:
docker --version
docker-compose --version
快速启动 Airflow[编辑 | 编辑源代码]
Airflow 官方提供了默认的 `docker-compose.yaml` 文件,可通过以下步骤获取并运行:
1. 下载官方示例文件:
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml'
2. 初始化数据库:
docker-compose up airflow-init
3. 启动所有服务:
docker-compose up -d
4. 访问 Web UI: 默认地址为 `http://localhost:8080`,用户名和密码均为 `airflow`。
配置文件解析[编辑 | 编辑源代码]
以下是 `docker-compose.yaml` 的核心部分解析:
version: '3.8'
services:
postgres:
image: postgres:13
environment:
POSTGRES_USER: airflow
POSTGRES_PASSWORD: airflow
POSTGRES_DB: airflow
volumes:
- postgres-db-volume:/var/lib/postgresql/data
airflow-webserver:
image: apache/airflow:2.5.0
depends_on:
- postgres
- airflow-scheduler
environment:
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
ports:
- "8080:8080"
volumes:
- ./dags:/opt/airflow/dags
关键配置说明:
- postgres:Airflow 的元数据库,使用 PostgreSQL 13。
- airflow-webserver:Airflow 的 Web 服务器,依赖 PostgreSQL 和 Scheduler。
- volumes:将本地 `dags` 目录挂载到容器,便于开发调试。
自定义配置[编辑 | 编辑源代码]
用户可以通过修改 `docker-compose.yaml` 和 `.env` 文件调整 Airflow 行为。
修改 Executor[编辑 | 编辑源代码]
Airflow 支持多种执行器,如 `SequentialExecutor`、`LocalExecutor` 和 `CeleryExecutor`。以下示例展示如何切换至 `CeleryExecutor`:
environment:
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
AIRFLOW__CELERY__BROKER_URL: redis://redis:6379/0
添加 Redis 服务[编辑 | 编辑源代码]
若使用 `CeleryExecutor`,需添加 Redis 作为消息队列:
services:
redis:
image: redis:latest
ports:
- "6379:6379"
实际案例[编辑 | 编辑源代码]
以下是一个真实场景:使用 Docker Compose 部署 Airflow,并运行一个简单的 DAG。
1. 创建 `dags/example_dag.py`:
from datetime import datetime
from airflow import DAG
from airflow.operators.bash import BashOperator
dag = DAG(
'example_dag',
schedule_interval='@daily',
start_date=datetime(2023, 1, 1)
)
task = BashOperator(
task_id='print_date',
bash_command='date',
dag=dag
)
2. 重启服务以加载新 DAG:
docker-compose restart airflow-webserver airflow-scheduler
3. 在 Web UI 中激活并触发 DAG。
高级优化[编辑 | 编辑源代码]
资源限制[编辑 | 编辑源代码]
可通过 `docker-compose.yaml` 限制容器资源:
airflow-worker:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
使用自定义镜像[编辑 | 编辑源代码]
若需安装额外 Python 包,可基于官方镜像构建自定义镜像:
FROM apache/airflow:2.5.0
RUN pip install --user pandas numpy
故障排查[编辑 | 编辑源代码]
常见问题及解决方案:
- Web UI 无法访问:检查端口冲突或服务日志(`docker-compose logs airflow-webserver`)。
- DAG 未加载:确保 `dags` 目录正确挂载,并检查 Scheduler 日志。
总结[编辑 | 编辑源代码]
使用 Docker Compose 部署 Airflow 能显著降低运维复杂度,适合快速搭建开发和生产环境。通过灵活配置,用户可轻松扩展 Airflow 集群,并集成自定义依赖。建议结合 CI/CD 管道进一步自动化部署流程。