在 Docker 中运行 Airflow2025 年 6 月 11 日 | 阅读 11 分钟 引言Apache Airflow 是一个强大的平台,用于编排复杂的业务流程和管理数据管道。它允许开发人员和数据工程师使用 Python 以编程方式定义、调度和监控业务流程。然而,由于 Airflow 依赖于数据库、消息代理以及工作节点和调度器等分布式组件,其设置可能很复杂。 在 Docker 中运行 Apache Airflow 通过将其组件封装在轻量级、可移植的容器中,简化了这一过程。Docker 化 Airflow 提供了一个一致、可重现和可扩展的环境,使其成为生产和开发设置的绝佳选择。 什么是Apache Airflow?Apache Airflow 用于以编程方式创作、调度和监控工作流。Airflow 中的工作流使用 Python 定义,这使其具有灵活性和动态性。 在 Docker 中运行 Airflow 时,我们利用 Docker Compose 设置一个多容器环境,该环境包含以下关键组件:
为什么选择 Docker?使用 Docker 有几个优点:
前提条件在继续之前,请确保您的系统上安装了以下工具:
设置环境变量设置环境变量以避免硬编码敏感信息并灵活管理配置。对于 Airflow,最重要的环境变量是 AIRFLOW_UID,它确保 Docker 容器在正确的用户权限下运行。 变量设置如下: 或者,将这些变量存储在 .env 文件中: Docker Compose 会自动加载 .env 文件。 获取 Apache Airflow 的 docker-compose.yamldocker-compose.yaml 文件是在 Docker 中运行 Apache Airflow 的重要组成部分。此文件编排所有必要服务的设置,包括 Airflow web 服务器、调度器、工作节点、元数据数据库和消息代理。获取和理解此文件对于正确部署和操作 Airflow 至关重要。 下载的 docker-compose.yaml 定义了几个服务:
什么是 docker-compose?yamldocker-compose.yaml 文件是 Docker Compose 用于定义和管理多容器 Docker 应用程序的配置文件。对于 Apache Airflow,此文件指定:
为什么要使用预定义的 docker-compose.yaml?Apache Airflow 提供了一个官方的、预配置的 docker-compose.yaml 文件,它通过以下方式简化了设置过程:
下载 docker-compose.yaml 文件官方 docker-compose.yaml 文件可从 Apache Airflow 文档中获取。要下载它: 使用 curl 运行以下命令获取文件: 使用 wget 或者,您可以使用 wget: 手动下载 如果您愿意,请访问官方 Apache Airflow 文档并直接下载文件。 文件位置下载后,确保文件保存在您的工作目录中。确认其存在: 理解 docker-compose.yaml 文件下载的 docker-compose.yaml 定义了运行 Apache Airflow 所需的几个关键服务。以下是其组件的详细分类: Airflow Web 服务器
airflow-webserver 环境 网络 Airflow 调度器
airflow-scheduler 环境 网络 Airflow 工作节点
airflow-worker 环境 网络 Redis
Redis 网络 PostgreSQL
Postgres 卷 网络 Airflow 初始化
airflow-init 卷 入口点:airflow db init 网络 卷
卷 网络
网络 自定义文件虽然提供的 docker-compose.yaml 是一个很好的起点;您可能需要根据您的用例对其进行自定义: 更改端口为了避免与现有应用程序冲突,请修改端口映射: 端口 添加依赖项通过扩展 Airflow 镜像来安装其他 Python 包: 更新 docker-compose.yaml 中的镜像引用: 验证文件下载并自定义文件后,验证其语法以避免错误: 此命令检查任何语法问题并输出合并的配置。 后续步骤一旦 docker-compose.yaml 文件准备就绪: 通过运行以下命令初始化环境: 启动所有服务: 初始化 Apache Airflow 数据库数据库初始化是设置 Apache Airflow 的关键一步。此过程涉及创建必要的元数据数据库、设置基本配置文件以及准备 Airflow 以管理和执行工作流。以下是关于如何在 Docker 环境中初始化 Airflow 数据库的详细说明。 数据库初始化的目的数据库初始化:
创建所需目录Apache Airflow 需要特定的目录来存储日志、DAG(有向无环图)和插件。这些目录必须在初始化环境之前创建,以确保正确的挂载和数据持久性。 创建目录的命令 在终端中运行以下命令: 说明
设置环境变量环境变量定义了 Airflow 容器的用户权限。使用 .env 文件可以简化此过程并确保设置一致。 生成 .env 文件 使用以下命令创建 .env 文件: 说明
验证 .env 文件检查 .env 文件的内容: cat .env 您应该看到类似以下内容: 运行初始化命令要初始化数据库,您需要运行 docker-compose.yaml 文件中定义的 airflow-init 服务。 初始化命令 运行以下命令 初始化期间会发生什么?元数据数据库设置
配置文件生成
清理 Apache Airflow 环境清理环境是重置 Apache Airflow 设置或解决问题的重要任务。此过程涉及停止容器、删除持久数据和删除生成的文件,以确保一个干净的开始。 停止容器在重置环境之前,停止所有正在运行的容器以释放资源并确保没有服务处于活动状态。 停止容器的命令 此操作:
验证容器关闭 运行命令后,您可以检查是否有任何活动的容器: 空列表表示所有容器都已停止。 删除卷Airflow 使用 Docker 卷来存储持久数据,如日志、数据库信息和配置文件。要完全重置环境,请删除这些卷。 删除卷的命令 此操作:
何时使用
删除生成的文件除了 Docker 卷,Airflow 还在您的主机上生成特定的文件和目录。如果您想重置本地设置,请删除这些文件。 删除生成文件的命令 删除的文件和目录:
最后步骤清理后:
清理环境可确保您的 Apache Airflow 实例处于全新且稳定的状态,无论是用于故障排除、升级还是启动新项目。 Docker Compose 中的环境变量Docker Compose 支持使用环境变量来增强灵活性、维护安全性并简化配置。这些变量可以定义容器特定的设置、服务级属性或应用程序配置。理解和利用环境变量可以显著提高 Docker Compose 项目的可用性和可维护性。 Docker Compose 中的环境变量类型
在 docker-compose.yaml 中使用环境变量内联定义环境变量 您可以在 `environment` 键中内联定义变量: 或者,您可以使用字典样式格式: 引用系统环境变量 Docker Compose 允许使用 `${VARIABLE_NAME}` 语法引用主机环境变量: 这确保容器从主机系统继承 `API_KEY` 变量的值。 外部 .env 文件.env 文件是一个简单的文本文件,包含环境变量的键值对。如果 .env 文件与 docker-compose.yaml 文件位于同一目录中,Docker Compose 会自动加载它。 创建 .env 文件在同一目录中创建一个名为 .env 的文件: 使用 .env 中的变量 在您的 docker-compose.yaml 文件中: 覆盖 .env 变量您可以通过在主机系统上导出环境变量来覆盖 .env 文件中的值。例如: 构建时变量您可以在 docker-compose.yaml 中的 `build` 键下定义构建时变量。这在构建自定义 Docker 镜像时很有用。 示例 您还可以在运行时覆盖构建参数: 作用域变量docker-compose.yaml 中的环境变量作用域为它们所定义的服务。在一个服务的 `environment` 键下声明的变量,除非明确共享,否则其他服务无法访问。 环境变量的优先级Docker Compose 按照以下优先级顺序(从高到低)解析环境变量:
使用条件默认值在 docker-compose.yaml 中为环境变量提供默认值: 如果 `ENV_VAR` 未设置,则默认为 `default_value`。 多个 .env 文件 使用 `--env-file` 标志指定不同的 .env 文件: 将 .env 与系统变量结合使用 .env 文件中的环境变量可以引用系统变量: 最佳实践
调试环境变量要解决与环境变量相关的问题,您可以检查正在运行的容器内的环境: 检查环境变量 运行以下命令 检查日志中的变量 如果您的应用程序记录环境变量,请从容器日志中验证它们的值: 在交互式 shell 中测试变量 在容器中启动 shell 会话并检查值: 用例示例场景您正在使用 Docker Compose 部署一个 Web 应用程序。该应用程序需要:
注意在 Apache Airflow 2.2 之前的版本中,docker-compose.yaml 文件通常包含一个名为 AIRFLOW_GID 的环境变量。此参数与主机系统的组 ID (GID) 相关联,并与 AIRFLOW_UID (用户 ID) 一起用于管理文件和目录权限。然而,从 Airflow 2.2 开始,它最终被认为是不必要的并被移除。 设置.env 文件 Docker-compose.yaml 服务 DB 结果
Docker Compose 中的环境变量提供了一种强大的方式来配置和管理您的容器化应用程序。通过有效使用 .env 文件、内联定义和系统变量,您可以为任何项目构建灵活、安全且可维护的环境。 |
我们请求您订阅我们的新闻通讯以获取最新更新。