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

news2024/9/24 12:26:45

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

步骤 1:创建项目目录

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

mkdir airflow-mysql
cd airflow-mysql

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

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

version: '3.7'

services:
  mysql:
    image: mysql:8.0.27
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: airflow
      MYSQL_USER: airflow
      MYSQL_PASSWORD: airflowpassword
      MYSQL_CHARSET: utf8mb4
      MYSQL_COLLATION: utf8mb4_general_ci
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  airflow-webserver:
    image: apache/airflow:2.9.3
    environment:
      AIRFLOW__CORE__EXECUTOR: LocalExecutor
      AIRFLOW__CORE__SQL_ALCHEMY_CONN: mysql+mysqldb://airflow:airflowpassword@mysql:3306/airflow
      AIRFLOW__CORE__FERNET_KEY: 'YOUR_FERNET_KEY'
      AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
      AIRFLOW__WEBSERVER__RBAC: 'true'
    depends_on:
      - mysql
    ports:
      - "8080:8080"
    volumes:
      - ./dags:/opt/airflow/dags
      - ./logs:/opt/airflow/logs
      - ./plugins:/opt/airflow/plugins
    command: ["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.3
    environment:
      AIRFLOW__CORE__EXECUTOR: LocalExecutor
      AIRFLOW__CORE__SQL_ALCHEMY_CONN: mysql+mysqldb://airflow:airflowpassword@mysql:3306/airflow
      AIRFLOW__CORE__FERNET_KEY: 'YOUR_FERNET_KEY'
      AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
      AIRFLOW__WEBSERVER__RBAC: 'true'
    depends_on:
      - mysql
    volumes:
      - ./dags:/opt/airflow/dags
      - ./logs:/opt/airflow/logs
      - ./plugins:/opt/airflow/plugins
    command: ["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, timedelta

default_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.coloradmin.cn/o/2160340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP探索校园新生态校园帮小程序系统小程序源码

探索校园新生态 —— 校园帮小程序系统&#xff0c;让生活更精彩&#xff01; &#x1f331;【开篇&#xff1a;走进未来校园&#xff0c;遇见新生态】&#x1f331; 你是否厌倦了传统校园的繁琐与单调&#xff1f;是否渴望在校园里也能享受到便捷、智能的生活体验&#xff1…

APS软件:生产计划排程的秩序守护者

生产计划制定 &#xff08;1&#xff09;APS排程是一种高度精细化的生产计划制定方法&#xff0c;它精准地计算出不同产品不同工序生产任务的起始、结束时间、每段工序加工时间内的生产数量以及产品的整个生产周期&#xff0c;同时全面考量设备性能、人员配置、物料供应等关键…

全球地图——为论文增色

✨全球地图是全球研究常用的结果表现形式&#xff0c;随着学科交叉&#xff0c;很多非地学&#xff08;环境、化学、生物等&#xff09;的顶刊也会运用到全球地图&#xff0c;为结果增色不少 ✨我总结了一些顶刊 (NSP&#xff0c;NG&#xff0c;NC)最新发布的相关图表✨ 这些图…

st7735调试记录

由于该模块陪我已经超过十年&#xff0c;最近想起来学习下lvgl&#xff0c;于是乎将其拿出来&#xff0c;尝试使能该模块从而学会lvgl 第一步肯定是找到资料确定下该模块是否好用。于是到网络上找到如下资料进行验证&#xff1a; https://pan.baidu.com/s/1CEunLuGUqLABR6I0UZ…

结构设计模式 -装饰器设计模式 - JAVA

装饰器设计模式 一. 介绍二. 代码示例2.1 抽象构件&#xff08;Component&#xff09;角色2.2 具体构件&#xff08;Concrete Component&#xff09;角色2.3 装饰&#xff08;Decorator&#xff09;角色2.4 具体装饰&#xff08;Concrete Decorator&#xff09;角色2.5 测试 结…

mysql 报 ERROR 1273: Unknown collation: ‘utf8mb4_0900_ai_ci‘ 的处理

1、数据库sql是mysql8的导出的&#xff0c;本机上安装的还是5.7的版本&#xff0c;然后导入sql&#xff0c;直接就报错。 2、mysql的下载地址&#xff1a; MySQL :: Download MySQL Community Server 3、报错截图&#xff1a; 4、重新选择一个collation就可以了&#xff0c;…

MoNA:复用跨模态预训练模型,少样本模态的福音 | ICML‘24

跨模态转移旨在利用大型预训练模型来完成可能不属于预训练数据模态的任务。现有的研究在将经典微调扩展到跨模态场景方面取得了一定的成功&#xff0c;但仍然缺乏对模态差距对转移的影响的理解。在这项工作中&#xff0c;进行了一系列关于转移过程中源表示质量的实验&#xff0…

最新视频号名字使用规范你了解了吗!

文章来源&#xff1a;视频号官方平台 视频号名字使用需遵循以下规范&#xff1a; 账号名字应当与简介的内容相符&#xff0c;且不得与已注册成功的账号名字重复。 账号超过180天未以视频号身份进行发表、评论等操作&#xff0c;将不再受到名字唯一保护&#xff0c;有其他用户申…

FPGA实现频率、幅度、相位可调的DDS以及DDS Compiler IP核的使用验证

文章目录 一、DDS介绍二、DDS原理2.1 频率计算2.2 相位改变2.3 波形切换 三、Matlab生成波形文件四、FPGA实现DDS4.1 Verilog代码4.2 仿真验证4.2.1 改变频率4.2.2 切换波形4.2.3 相位调节4.2.4 幅度调节 五、Xilinx DDS Compiler的使用5.1 功能框图5.1.1 相位累加器5.1.2 SIN/…

通俗讲解javascript的实例对象、原型对象和构造函数以及它们之间的关系

今天通俗讲解一下js的对象&#xff0c;因为要通俗&#xff0c;所以可能描述不甚准确。 在js中&#xff0c;想要创建一个对象&#xff0c;首先要写出构造函数&#xff08;跟其它的语言不太一样哦&#xff0c;其它语言一般都会先写一个class 类名&#xff09;。 构造函数写法如…

【PGCCC】 复合索引和部分索引,竟然能让查询速度提升 275 倍!

索引对于加速数据库查询和提高 PostgreSQL 应用程序的性能至关重要。但是&#xff0c;并非所有索引都以相同的方式发挥作用。复合索引和部分索引是两种常见类型&#xff0c;每种类型都有不同的用途和对性能的影响。本文我们将深入探讨复合索引和部分索引是什么、它们如何运作以…

关于在vue2中给el-input等输入框的placeholder加样式

::v-deep {.el-input--medium,.el-input__inner {height: 100%;background: #163670;border: 1px solid #4cc0f6;border-radius: 6px 6px 6px 6px;&::placeholder {color: #13EFFF;}} } 效果如下&#xff1a; .el-date-editor .el-range-input{&::placeholder {color:…

SAP MIGO M7146不支持移动原因

移动类型 Z91 查看配置&#xff1a;Z91 匹配的原因没有921 倒是Z92的原因里面有921 那解决方案有2种&#xff0c;但是要根据具体业务要求来 1、审视一下是否移动原因用错了 &#xff1f;换一个移动原因 2、确实是这个移动类型 要用到这个移动原因 &#xff0c;那就在上图 移…

Python编码系列—Python观察者模式:实现事件驱动架构的利器

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

【数字ic自整资料】SV约束constraint

参考链接&#xff1a; SV--随机约束&#xff08;一&#xff09;_sv constraint-CSDN博客 SV--随机约束&#xff08;二&#xff09;_sv constraint f循环-CSDN博客 [SV]Constraint 遇到的问题_父类和子类 constraint-CSDN博客 目录 1、随机化的概念理解 2、约束(constrain…

基于报位时间判断船舶设备是否在线,基于心跳时间判断基站网络是否在线

文章目录 引言I 在线船舶查询在线或者离线船舶显示在线状态统计在线船舶II 树状显示船舶设备数据结构统计船舶设备在线数和总数III 基站网络是否在线IV 知识扩展统计某个key的数据,例如统计船舶分类下的在线船舶MyBatis引言 本文采用的数据库是SQL Server,开发语言为Java。 …

无线协议wlan在华为模拟器中的实现

无线技术 wifi6:标准为802.11&#xff1b; wifi发展趋势&#xff1a; vlan基本概念&#xff1a; wlan组网架构&#xff1a; 1)fat胖AP;能够独立工作&#xff0c;可以单独配置&#xff1b;小型网络使用&#xff0c;功能少&#xff1b; 2)fit瘦APAC&#xff1a;适用大型网络…

《深度学习》—— PyTorch的介绍及PyTorch的CPU版本安装

文章目录 一、PyTorch的简单介绍二、pytorch的CPU版本安装三、 torch、torchvision、torchaudio 三个库的介绍 一、PyTorch的简单介绍 PyTorch是一个由Facebook AI实验室开发的深度学习框架&#xff0c;它基于Python&#xff0c;并提供了高效的GPU加速和灵活的模型定义能力。1…

基于vue框架的传统服饰剪裁交流平台5m953(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,服装分类,服装资讯 开题报告内容 基于Vue框架的传统服饰剪裁交流平台开题报告 一、研究背景与意义 随着全球化进程的加速&#xff0c;文化多样性的保护与传承日益受到重视。传统服饰作为各民族历史文化的瑰宝&#xff0c;不仅承载…

阅读记录:Gradient Episodic Memory for Continual Learning

1. Contribution 提出了一组指标来评估模型在连续数据上的学习情况。这些指标不仅通过测试准确性来表征模型&#xff0c;还通过其跨任务迁移知识的能力来表征模型。针对持续学习任务&#xff0c;提出了GEM模型&#xff08;Gradient Episodic Memory&#xff09;&#xff0c;它…