使用Docker快速搭建Airflow+MySQL详细教程

server/2024/9/24 16:09:35/

为了使用 Docker 安装 Apache Airflow 2.9.3 并配置 MySQL 数据库,确保数据持久化,我们可以使用 Docker Compose。以下是详细步骤:

步骤 1:创建项目目录

在你的工作目录中创建一个新目录来存放所有相关的配置文件和脚本。

mkdir airflow-mysql
cd airflow-mysql

dockercomposeyml__11">步骤 2:创建 docker-compose.yml 文件

在项目目录中创建一个名为 docker-compose.yml 的文件,内容如下:

version: '3.7'services:mysql:image: mysql:8.0.27environment:MYSQL_ROOT_PASSWORD: rootpasswordMYSQL_DATABASE: airflowMYSQL_USER: airflowMYSQL_PASSWORD: airflowpasswordMYSQL_CHARSET: utf8mb4MYSQL_COLLATION: utf8mb4_general_ciports:- "3306:3306"volumes:- mysql_data:/var/lib/mysqlairflow-webserver:image: apache/airflow:2.9.3environment:AIRFLOW__CORE__EXECUTOR: LocalExecutorAIRFLOW__CORE__SQL_ALCHEMY_CONN: mysql+mysqldb://airflow:airflowpassword@mysql:3306/airflowAIRFLOW__CORE__FERNET_KEY: 'YOUR_FERNET_KEY'AIRFLOW__CORE__LOAD_EXAMPLES: 'false'AIRFLOW__WEBSERVER__RBAC: 'true'depends_on:- mysqlports:- "8080:8080"volumes:- ./dags:/opt/airflow/dags- ./logs:/opt/airflow/logs- ./plugins:/opt/airflow/pluginscommand: ["bash", "-c", "airflow db init && airflow users create -r Admin -u admin -p admin -e admin@example.com -f Admin -l User && airflow webserver"]airflow-scheduler:image: apache/airflow:2.9.3environment:AIRFLOW__CORE__EXECUTOR: LocalExecutorAIRFLOW__CORE__SQL_ALCHEMY_CONN: mysql+mysqldb://airflow:airflowpassword@mysql:3306/airflowAIRFLOW__CORE__FERNET_KEY: 'YOUR_FERNET_KEY'AIRFLOW__CORE__LOAD_EXAMPLES: 'false'AIRFLOW__WEBSERVER__RBAC: 'true'depends_on:- mysqlvolumes:- ./dags:/opt/airflow/dags- ./logs:/opt/airflow/logs- ./plugins:/opt/airflow/pluginscommand: ["bash", "-c", "airflow scheduler"]volumes:mysql_data:

请注意,YOUR_FERNET_KEY 需要替换为一个实际的 Fernet 密钥,可以通过以下命令生成:

python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"

步骤 3:创建目录结构

为 Airflow 的 DAGs、日志和插件创建目录:

mkdir -p dags logs plugins
chmod -R 777 dags logs plugins

步骤 4:启动 Docker Compose

在项目目录中运行以下命令来启动所有服务:

docker-compose up -d

步骤 5:检查服务状态

你可以使用以下命令查看正在运行的容器:

docker-compose ps

步骤 6:访问 Airflow Web UI

打开浏览器并访问 http://localhost:8080,你应该能够看到 Airflow 的登录页面。使用以下默认凭据登录:

  • 用户名:admin
  • 密码:admin

解释

服务定义
  • mysql: 使用 MySQL 8.0.27 镜像,设置数据库名称、用户和密码,并将数据持久化到 mysql_data 卷中。
  • airflow-webserver: 使用 Airflow 2.9.3 镜像,配置连接 MySQL 的连接字符串,初始化数据库并创建管理员用户,然后启动 Airflow Webserver。
  • airflow-scheduler: 使用 Airflow 2.9.3 镜像,配置连接 MySQL 的连接字符串,并启动 Airflow Scheduler。
数据持久化
  • MySQL 数据通过 Docker 卷 mysql_data 持久化。
  • Airflow 的 DAGs、日志和插件通过绑定挂载到主机的目录 ./dags./logs./plugins

其他配置

环境变量说明
  • AIRFLOW__CORE__EXECUTOR: LocalExecutor 表示使用本地执行器。
  • AIRFLOW__CORE__SQL_ALCHEMY_CONN: 设置 Airflow 连接 MySQL 的连接字符串。格式为 mysql+mysqldb://<username>:<password>@<host>:<port>/<database>
  • AIRFLOW__CORE__FERNET_KEY: 用于加密连接密码的密钥。可以通过 python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" 生成这个密钥。
  • AIRFLOW__CORE__LOAD_EXAMPLES: 设置为 false 表示不加载示例 DAGs,以保持环境干净。
  • AIRFLOW__WEBSERVER__RBAC: 启用基于角色的访问控制。

Docker Compose 配置说明

  • depends_on: 确保 MySQL 服务在 Airflow 服务之前启动。
  • volumes: 用于持久化数据和共享文件。MySQL 数据存储在 mysql_data 卷中;Airflow 的 DAGs、日志和插件分别绑定挂载到主机的 ./dags./logs./plugins 目录。
  • command: 定义容器启动时要运行的命令。对于 airflow-webserver 服务,首先初始化数据库并创建管理员用户,然后启动 Airflow Webserver。对于 airflow-scheduler 服务,启动 Airflow Scheduler。

确保持久化

持久化数据是确保服务重启后数据不会丢失的关键。我们使用 Docker 卷来持久化 MySQL 数据,并使用绑定挂载来持久化 Airflow 的 DAGs、日志和插件。

启动和管理容器

  1. 启动容器

    docker-compose up -d
    
  2. 查看容器状态

    docker-compose ps
    
  3. 查看日志

    docker-compose logs -f
    
  4. 停止和删除容器

    docker-compose down
    

进一步配置和优化

安全性
  1. 更改默认密码
    默认的管理员密码为 admin,建议在第一次登录后立即更改密码。

  2. 使用环境变量保护敏感信息
    避免将敏感信息直接写入 docker-compose.yml 文件,可以使用 Docker Secrets 或环境变量来保护敏感信息。

资源限制

根据你的硬件资源,可以在 docker-compose.yml 中为容器设置资源限制:

airflow-webserver:...deploy:resources:limits:cpus: '0.50'memory: '512M'...
日志管理

确保日志文件不会无限制地增长,可以在 docker-compose.yml 中配置日志选项:

airflow-webserver:...logging:driver: "json-file"options:max-size: "10m"max-file: "3"...
备份和恢复

定期备份 MySQL 数据库和 Airflow 配置,以防止数据丢失。你可以使用 cron jobs 或其他备份工具来实现这一点。

扩展性

如果需要扩展到多个节点,可以考虑使用 CeleryExecutor 或 KubernetesExecutor。CeleryExecutor 需要额外的配置和 Redis/RabbitMQ 作为消息队列。

示例 DAG 创建

dags 目录中创建一个简单的示例 DAG 文件,例如 example_dag.py

from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedeltadefault_args = {'owner': 'airflow','depends_on_past': False,'email_on_failure': False,'email_on_retry': False,'retries': 1,'retry_delay': timedelta(minutes=5),
}with DAG('example_dag',default_args=default_args,description='A simple example DAG',schedule_interval=timedelta(days=1),start_date=datetime(2023, 1, 1),catchup=False,
) as dag:t1 = BashOperator(task_id='print_date',bash_command='date',)t2 = BashOperator(task_id='sleep',bash_command='sleep 5',)t1 >> t2

这将创建一个简单的 DAG,包含两个任务:打印当前日期和等待 5 秒。

监控和日志

Airflow 提供了丰富的监控和日志功能,可以帮助你跟踪任务的执行状态和性能。

  1. Airflow Web UI
    通过 Web UI 查看 DAG 和任务的状态、日志和图形化表示。

  2. 日志文件
    查看容器内的日志文件,了解更多详细信息。

docker-compose logs airflow-webserver
docker-compose logs airflow-scheduler

更新和升级

定期更新 Airflow 和相关依赖项,以确保获得最新的功能和安全补丁。

  1. 更新 Docker 镜像

    docker pull apache/airflow:2.9.3
    docker-compose up -d
    
  2. 更新 MySQL 镜像

    docker pull mysql:8.0.27
    docker-compose up -d
    

结论

通过这些步骤,你可以成功地使用 Docker 和 MySQL 部署和配置 Apache Airflow 2.9.3


验证 Docker 容器是否成功启动,可以使用一系列命令来检查容器的状态和日志。以下是一些常用的命令和步骤:

1. 检查容器状态

使用 docker ps 命令查看正在运行的容器:

docker ps

这个命令会列出所有正在运行的容器,包括它们的容器 ID、名称、状态等。

如果要查看所有容器(包括停止的),可以使用 -a 选项:

docker ps -a

2. 查看容器日志

查看特定容器的日志可以帮助你了解容器是否正常启动,并排除潜在的错误。使用 docker logs 命令:

docker logs <container_id_or_name>

你还可以使用 -f 选项来实时跟踪日志输出:

docker logs -f <container_id_or_name>

3. 使用 Docker Compose 验证

如果你使用的是 Docker Compose,可以使用以下命令查看所有服务的状态:

docker-compose ps

查看所有服务的日志:

docker-compose logs

实时查看日志:

docker-compose logs -f

4. 具体示例

假设你有一个名为 airflow-webserver 的容器,以下是如何验证它是否成功启动的步骤:

  1. 检查容器状态

    docker ps
    

    你应该看到类似以下的输出:

    CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS         PORTS                    NAMES
    abc123def456   apache/airflow:2.9.3    "/entrypoint.sh airf…"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp   airflow-webserver
    

    如果容器状态是 Up,表明容器正在运行。

  2. 查看容器日志

    docker logs airflow-webserver
    

    你应该看到 Airflow Webserver 的启动日志,确认没有错误信息。

  3. 实时跟踪日志

    docker logs -f airflow-webserver
    

    实时查看容器的输出,确保没有任何问题。

  4. 使用 Docker Compose 验证

    docker-compose ps
    

    你应该看到类似以下的输出:

       Name                     Command               State                                  Ports
    -----------------------------------------------------------------------------------------------------------
    airflow-mysql_mysql_1      docker-entrypoint.sh mysqld      Up             3306/tcp
    airflow-mysql_webserver_1  /entrypoint.sh airflow w ...     Up (healthy)   0.0.0.0:8080->8080/tcp
    airflow-mysql_scheduler_1  /entrypoint.sh airflow s ...     Up
    
  5. 查看所有服务的日志

    docker-compose logs
    
  6. 实时查看所有服务的日志

    docker-compose logs -f
    

5. 健康检查

一些 Docker 镜像提供了健康检查功能,可以通过 docker ps 命令中的 STATUS 列查看健康状态。如果镜像支持健康检查,你会看到类似 Up (healthy) 的状态。

6. 访问 Web UI

最终,你可以通过浏览器访问相应的服务 URL 以验证服务是否正常运行。例如,对于 Airflow Webserver,你可以访问 http://localhost:8080,如果能够看到 Airflow 的登录页面,说明 Webserver 已经成功启动。

总结

通过这些命令和步骤,可以有效地验证 Docker 容器是否成功启动,并通过查看日志和状态排除潜在的错误。


http://www.ppmy.cn/server/121417.html

相关文章

python是什么语言写的

Python是一种计算机程序设计语言。是一种面向对象的动态类型语言。现今Python语言很火&#xff0c;可有人提问&#xff0c;这么火的语言它的底层又是什么语言编写的呢&#xff1f; python是C语言编写的&#xff0c;它有很多包也是用C语言写的。 所以说&#xff0c;C语言还是很…

Linux系统接口--五种IO模型

1、简介 Linux IO 模型根据实现的功能可以划分为为阻塞 IO、 非阻塞 IO、 信号驱动 IO&#xff0c; IO 多路复用和异 步 IO。 根据等待 IO 的执行结果进行划分&#xff0c; 前四个 IO 模型又被称为同步 IO&#xff0c;如下图&#xff1a; 2、详细介绍 2.1 阻塞IO 在阻塞IO模…

Unity 设计模式 之 行为型模式 -【访问者模式】【模板模式】【策略模式】

Unity 设计模式 之 行为型模式 -【访问者模式】【模板模式】【策略模式】 目录 Unity 设计模式 之 行为型模式 -【访问者模式】【模板模式】【策略模式】 一、简单介绍 二、访问者模式&#xff08;Visitor Pattern&#xff09; 1、什么时候使用访问者模式 2、使用访问者模…

Flink的反压机制:底层原理、产生原因、排查思路与解决方案

反压&#xff08;Backpressure&#xff09;是流处理框架&#xff08;如 Apache Flink&#xff09;中非常重要的概念。反压的产生和有效处理&#xff0c;直接影响整个流处理作业的稳定性和性能。本文将从 Flink 的底层原理、反压产生的原因、如何排查反压问题&#xff0c;以及如…

【设计模式】UML类图

目录 前言 一、类图概述 二、类图的作用 三、类图表示法 四、类之间关系的表示方法 1. 关联关系 1.1 单向关联 1.2 双向关联 1.3 自关联 2. 聚合关系 3. 组合关系 4. 依赖关系 5. 继承关系 6. 实现关系 总结 前言 统一建模语言&#xff08; Unified Modeling La…

基于R语言的统计分析基础:使用SQL语句操作数据集

在使用R语言数据分析时&#xff0c;可以融合SQL语言使数据聚集操作更加便利&#xff0c;同时也可以增加对SQL语句的熟悉。借助sqldf、DBI、RSDLite等包&#xff0c;可以在R环境中直接运用SQL语句&#xff0c;轻松实现数据的分组统计、汇总分析&#xff0c;SQL的强大查询能力简化…

【STM32】定时器

一、 定时器概述 定义 ​ 设置等待时间&#xff0c; 到达后则执行指定操作的硬件。 STM32F407 的定时器有以下特征 ​ 具有基本的定时功能&#xff0c; 也有 PWM 输出&#xff08;灯光亮度控制、 电机的转速&#xff09;、 脉冲捕获功能&#xff08;红外捕捉&#xff09;。…

6--SpringBootWeb案例(详解)

目录 环境搭建 部门管理 查询部门 接口文档 代码 删除部门 接口文档 代码 新增部门 接口文档 代码 已有前端&#xff0c;根据接口文档完成后端功能的开发 成品如下&#xff1a; 环境搭建 1. 准备数据库表 (dept 、 emp) -- 部门管理 create table dept( id int un…