开发者

使用Docker快速搭建Airflow+MySQL详细步骤

目录
  • 步骤 1:创建项目目录
  • 步骤 2:创建 docker-compose.yml 文件
  • 步骤 3:创建目录结构
  • 步骤 4:启动 Docker Compose
  • 步骤 5:检查服务状态
  • 步骤 6:访问 Airflow Web UI
  • 确保持久化
  • 启动和管理容器
  • 进一步配置和优化
  • 备份和恢复
  • 扩展性
  • 示例 DAG 创建
  • 监控和日志
  • 更新和升级
  • 结论
  • 1. 检查容器状态
  • 2. 查看容器日志
  • 3. 使用 Docker Compose 验证
  • 4. 具体示例
  • 5. 健康检查
  • 6. 访问 Web UI
  • 总结

为了使用 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"]
volumhttp://www.devze.comes:
  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 目录。
  • c编程客栈ommand: 定义容器启动时要运行的命令。对于 airflow-webserver 服务,首先初始化数据库并创建管理员用户,然后启动 Airflow Webserver。对于 airflow-scheduler 服务,启动 Airflow Scheduler。

确保持久化

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

启动和管理容器

启动容器

docker-compose up -d

查看容器状态

docker-compose ps

查看日志

docker-compose logs -f

停止和删除容器

docker-compose down

进一步配置和优化

安全性

更改默认密码

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

使用环境变量保护敏感信息

避免将敏感信息直接写入 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 提供了丰富的监控和日志功能,可以帮助你跟踪任务的执行状态和性能。

Airflow Web UI

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

日志文件

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

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

更新和升级

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

更新 Docker 镜像

docker pull apache/airflow:2.9.3
docker-compose up -d

更新 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. 查看容器日志

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

docker logs <container_id_or_name>

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

docker logs -f <container_id_or_name>

3. 使用 Docker Compose 验证

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

docker logs -f <container_id_or_name>

查看所有服务的日志:

docker-compose logs

实时查看日志:

docker-compose logs -f

4. 具体示例

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

检查容器状态

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,表明容器正在运行。

查看容器日志

docker logs airflow-webserver

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

实时跟踪日志

docker logs -f airflow-webserver

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

使用 Docker Compose 验证

docker-compose ps

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

   Name                     Command               State                                  Ports

-----------------------------------------------------------------------------------------------------------

airflow-mysql_mysql_1      docker-entrypoint.sh mysqld      Up       js      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

查看所有服务的日志

docker-compose logs

实时查看所有服务的日志

docker-compose logs -f

5. 健康检查

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

6. 访问 Web UI

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

总结

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

到此这篇关于使用Docker快速搭建Airflow+MySQL详细步骤的文章就介绍到这了,更多相关Docker 搭建Airflow MySQL内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新数据库

数据库排行榜