使用Docker快速搭建Airflow+MySQL詳細步驟
為了使用 Docker 安裝 Apache Airflow 2.9.3 并配置 MySQL 數(shù)據(jù)庫并確保數(shù)據(jù)持久化,我們可以使用 Docker Compose。以下是詳細步驟:
步驟 1:創(chuàng)建項目目錄
在你的工作目錄中創(chuàng)建一個新目錄來存放所有相關的配置文件和腳本。
mkdir airflow-mysql cd airflow-mysql
步驟 2:創(chuàng)建 docker-compose.yml 文件
在項目目錄中創(chuàng)建一個名為 docker-compose.yml
的文件,內(nèi)容如下:
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:創(chuàng)建目錄結(jié)構(gòu)
為 Airflow 的 DAGs、日志和插件創(chuàng)建目錄:
mkdir -p dags logs plugins chmod -R 777 dags logs plugins
步驟 4:啟動 Docker Compose
在項目目錄中運行以下命令來啟動所有服務:
docker-compose up -d
步驟 5:檢查服務狀態(tài)
你可以使用以下命令查看正在運行的容器:
docker-compose ps
步驟 6:訪問 Airflow Web UI
打開瀏覽器并訪問 http://localhost:8080
,你應該能夠看到 Airflow 的登錄頁面。使用以下默認憑據(jù)登錄:
- 用戶名:
admin
- 密碼:
admin
解釋
服務定義
- mysql: 使用 MySQL 8.0.27 鏡像,設置數(shù)據(jù)庫名稱、用戶和密碼,并將數(shù)據(jù)持久化到
mysql_data
卷中。 - airflow-webserver: 使用 Airflow 2.9.3 鏡像,配置連接 MySQL 的連接字符串,初始化數(shù)據(jù)庫并創(chuàng)建管理員用戶,然后啟動 Airflow Webserver。
- airflow-scheduler: 使用 Airflow 2.9.3 鏡像,配置連接 MySQL 的連接字符串,并啟動 Airflow Scheduler。
數(shù)據(jù)持久化
- MySQL 數(shù)據(jù)通過 Docker 卷
mysql_data
持久化。 - Airflow 的 DAGs、日志和插件通過綁定掛載到主機的目錄
./dags
、./logs
和./plugins
。
其他配置
環(huán)境變量說明
AIRFLOW__CORE__EXECUTOR
:LocalExecutor
表示使用本地執(zhí)行器。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,以保持環(huán)境干凈。AIRFLOW__WEBSERVER__RBAC
: 啟用基于角色的訪問控制。
Docker Compose 配置說明
- depends_on: 確保 MySQL 服務在 Airflow 服務之前啟動。
- volumes: 用于持久化數(shù)據(jù)和共享文件。MySQL 數(shù)據(jù)存儲在
mysql_data
卷中;Airflow 的 DAGs、日志和插件分別綁定掛載到主機的./dags
、./logs
和./plugins
目錄。 - command: 定義容器啟動時要運行的命令。對于
airflow-webserver
服務,首先初始化數(shù)據(jù)庫并創(chuàng)建管理員用戶,然后啟動 Airflow Webserver。對于airflow-scheduler
服務,啟動 Airflow Scheduler。
確保持久化
持久化數(shù)據(jù)是確保服務重啟后數(shù)據(jù)不會丟失的關鍵。我們使用 Docker 卷來持久化 MySQL 數(shù)據(jù),并使用綁定掛載來持久化 Airflow 的 DAGs、日志和插件。
啟動和管理容器
啟動容器:
docker-compose up -d
查看容器狀態(tài):
docker-compose ps
查看日志:
docker-compose logs -f
停止和刪除容器:
docker-compose down
進一步配置和優(yōu)化
安全性
更改默認密碼:
默認的管理員密碼為 admin
,建議在第一次登錄后立即更改密碼。
使用環(huán)境變量保護敏感信息:
避免將敏感信息直接寫入 docker-compose.yml
文件,可以使用 Docker Secrets 或環(huán)境變量來保護敏感信息。
資源限制
根據(jù)你的硬件資源,可以在 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 數(shù)據(jù)庫和 Airflow 配置,以防止數(shù)據(jù)丟失。你可以使用 cron jobs 或其他備份工具來實現(xiàn)這一點。
擴展性
如果需要擴展到多個節(jié)點,可以考慮使用 CeleryExecutor 或 KubernetesExecutor。CeleryExecutor 需要額外的配置和 Redis/RabbitMQ 作為消息隊列。
示例 DAG 創(chuàng)建
在 dags
目錄中創(chuàng)建一個簡單的示例 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
這將創(chuàng)建一個簡單的 DAG,包含兩個任務:打印當前日期和等待 5 秒。
監(jiān)控和日志
Airflow 提供了豐富的監(jiān)控和日志功能,可以幫助你跟蹤任務的執(zhí)行狀態(tài)和性能。
Airflow Web UI:
通過 Web UI 查看 DAG 和任務的狀態(tài)、日志和圖形化表示。
日志文件:
查看容器內(nèi)的日志文件,了解更多詳細信息。
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
結(jié)論
通過這些步驟,你可以成功地使用 Docker 和 MySQL 部署和配置 Apache Airflow 2.9.3
驗證 Docker 容器是否成功啟動,可以使用一系列命令來檢查容器的狀態(tài)和日志。以下是一些常用的命令和步驟:
1. 檢查容器狀態(tài)
使用 docker ps
命令查看正在運行的容器:
docker ps
這個命令會列出所有正在運行的容器,包括它們的容器 ID、名稱、狀態(tài)等。
如果要查看所有容器(包括停止的),可以使用 -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,可以使用以下命令查看所有服務的狀態(tài):
docker logs -f <container_id_or_name>
查看所有服務的日志:
docker-compose logs
實時查看日志:
docker-compose logs -f
4. 具體示例
假設你有一個名為 airflow-webserver
的容器,以下是如何驗證它是否成功啟動的步驟:
檢查容器狀態(tài):
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
如果容器狀態(tài)是 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 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
列查看健康狀態(tài)。如果鏡像支持健康檢查,你會看到類似 Up (healthy)
的狀態(tài)。
6. 訪問 Web UI
最終,你可以通過瀏覽器訪問相應的服務 URL 以驗證服務是否正常運行。例如,對于 Airflow Webserver,你可以訪問 http://localhost:8080
,如果能夠看到 Airflow 的登錄頁面,說明 Webserver 已經(jīng)成功啟動。
總結(jié)
通過這些命令和步驟,可以有效地驗證 Docker 容器是否成功啟動,并通過查看日志和狀態(tài)排除潛在的錯誤。
到此這篇關于使用Docker快速搭建Airflow+MySQL詳細步驟的文章就介紹到這了,更多相關Docker 搭建Airflow MySQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
docker-compose管理容器network與ip問題
這篇文章主要介紹了docker-compose管理容器network與ip問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01Docker 容器生命周期 架構(gòu) 以及和VM之間的差異詳解
這篇文章主要介紹了Docker 容器生命周期 架構(gòu) 以及和VM之間的差異詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11