跳转到内容

Airflow Docker Compose

来自代码酷

Airflow Docker Compose[编辑 | 编辑源代码]

Airflow Docker Compose 是一种利用 DockerDocker 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 --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 管道进一步自动化部署流程。

参见[编辑 | 编辑源代码]