Airflow部署抉择:Docker还是virtual environment?入门避坑与学习咨询
Airflow 从零开始避坑指南及疑问解答
核心避坑原则
- 绝对不要全局安装Airflow到系统Python环境,环境隔离是避免混乱的核心
- 优先采用Docker Compose部署Airflow,这是官方推荐的标准方式,能彻底规避依赖冲突、端口占用等问题
1. Airflow 与 Docker的运行关系
正确逻辑是Airflow运行在Docker内部:Docker作为容器化引擎,负责封装Airflow的所有组件(Web服务、调度器、执行器、数据库等)及依赖环境,实现完全隔离。不存在“Docker运行在Airflow内部”的说法,Airflow是Python开发的工作流调度平台,Docker是宿主环境,二者是封装与被封装的关系。
2. Docker外运行Airflow的环境要求
如果必须在Docker外部署,必须将Airflow及所有依赖包安装在独立的Python虚拟环境中,这是避免污染系统环境、解决端口/版本冲突的唯一可行方案,步骤如下:
- 创建并激活虚拟环境:
python -m venv airflow-env && source airflow-env/bin/activate - 安装Airflow时必须使用官方提供的版本约束文件,指定具体版本以避免依赖冲突
- 初始化数据库:
airflow db init - 创建管理员用户:
airflow users create --username admin --password admin --firstname Admin --lastname User --role Admin --email admin@example.com - 分终端启动Web服务和调度器:
airflow webserver -p 8080、airflow scheduler
3. 学习Airflow前需掌握的知识
- 基础Python语法(函数、模块、包管理):DAG以Python代码编写,需能理解和编写基础Python逻辑
- Linux命令行操作:你已有10年经验,完全满足需求
- 工作流调度核心概念:任务依赖、定时执行、重试机制
- 可选补充:SQL基础(多数DAG会涉及数据库交互)、Docker基础(若采用容器部署)
4. 运行Bash Operator和Python Operator的步骤
步骤1:配置DAG目录
Airflow默认读取$AIRFLOW_HOME/dags下的DAG文件,先确认环境变量:echo $AIRFLOW_HOME(默认路径为~/airflow),若目录不存在则创建:mkdir -p ~/airflow/dags
步骤2:编写DAG文件(示例:~/airflow/dags/test_bash_python_dag.py)
from airflow import DAG from airflow.operators.bash import BashOperator from airflow.operators.python import PythonOperator from datetime import datetime, timedelta # 任务默认参数 default_args = { 'owner': 'your_username', 'retries': 1, 'retry_delay': timedelta(minutes=5) } # 定义DAG with DAG( dag_id='test_bash_python_dag', default_args=default_args, description='Simple DAG with Bash and Python Operators', start_date=datetime(2024, 1, 1), schedule_interval='@daily', catchup=False ) as dag: # Bash Operator:执行Shell命令 bash_task = BashOperator( task_id='run_bash_cmd', bash_command='echo "Hello from Bash Operator!"' ) # Python Operator:执行自定义函数 def python_task_func(): print("Hello from Python Operator!") return "Python Task Completed" python_task = PythonOperator( task_id='run_python_func', python_callable=python_task_func ) # 设置任务执行顺序:bash_task完成后执行python_task bash_task >> python_task
步骤3:启动Airflow服务
- 激活虚拟环境后,启动Web服务:
airflow webserver -p 8080 - 新开终端启动调度器:
airflow scheduler
步骤4:触发并验证任务
- 浏览器访问
http://localhost:8080,登录后找到test_bash_python_dag - 点击触发按钮启动任务,通过Graph View查看执行状态,点击任务日志可查看输出内容
额外避坑要点
- 安装Airflow必须指定版本和约束文件,杜绝依赖版本冲突
- 避免设置Airflow为系统级开机自启:虚拟环境部署手动启动即可;Docker部署通过
docker-compose up -d启动,docker-compose down停止,无系统残留 - 端口冲突时,虚拟环境可指定其他端口启动Web服务:
airflow webserver -p 8081;Docker部署修改docker-compose.yaml中的端口映射 - 彻底清理Airflow:虚拟环境直接删除环境目录;Docker执行
docker-compose down -v删除所有容器和数据卷
内容的提问来源于stack exchange,提问作者vinicius de novaes
相关产品推荐
相关产品推荐

