iT邦幫忙

2023 iThome 鐵人賽

DAY 16
1
AI & Data

Airflow 是什麼? 能吃嗎 ? 數據水管工的超級蘑菇系列 第 16

[Day16] 用 Docker Compose 建立 Airflow 環境

  • 分享至 

  • xImage
  •  

什麼是 Docker Compose

Compose 是組合或組成的意思,Docker Compose 就是代表組合多個 Docker 容器,可以直接用 YAML 檔案定義,也能一次運行多個 Docker 容器,如果沒有 Docker Compose,在操作 Docker 容器時,只能一個一個運行 Container,如果要重開或是停止也會很麻煩。

安裝 Docker Desktop 同時也會 安裝 Docker Compose

實作 Time

建立專案資料夾

  • 進入桌面
cd ~/Desktop
  • 創建資料夾
mkdir docker-airflow
  • 進入資料夾
cd docker-airflow

建立 YAML 檔案

https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html
要在 Docker Compose 上部署 Airflow,要先取得 docker-compose.yaml,官網上面有提供下方的指令,2.7.1 的部分可以改成你安裝的版本號。

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.7.1/docker-compose.yaml'

https://ithelp.ithome.com.tw/upload/images/20231001/20135427b9yqRfUNEz.png

接著輸入 ls,就可以看到資料夾底下有 docker-compose.yaml 的檔案

docker-compose.yaml 裡面有什麼

Docker Compose 可以分為四個區塊:

  1. Version:Docker Compose 版本
  2. Services:就是之後會建立的 container,幾個 Services 代表有幾個 Container
  3. Volumes:是在 Host 上的共用空間,讓 containers 可以分享資料,否則 Container 被刪除,資料也會不見
  4. networks:網路配置,Host、Containers 之間的溝通渠道以及方法

Version 是必須的,Services 至少建立一個,Volumes 和 Networks 都是進階選用的,有需要再設定

這個從 airflow 官網拿到的 YAML 檔案有什麼內容?

大部分在前面都提過了,Scheduler、Webserver 都是一樣的,沒有要用的服務其實可以刪除,但怕大家會刪到必要的內容,所以就先照著官方給的文件創建 Container,以順利開啟為第一目標。

version: '3.8'
x-airflow-common:
    image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.7.1}
    # build: .
    environment:
    volumes:
services:
    airflow-scheduler:
    airflow-webserver:
    airflow-worker:
    airflow-triggerer:
    airflow-init:
    airflow-cli:
    postgres:
    redis:
    flowers:
  • x-airflow-common: 設定自訂的擴展設定,如db連接。
    • build: .也可以另外加上Dockfile,安裝需要的模組。
    • environment:設置環境參數,在 Container 啟動和建立時會被使用
  • airflow-scheduler: 調度程序監視所有任務和 DAG,然後在其依賴關係完成後觸發任務實例
  • airflow-webserver: 網路伺服器,http://localhost:8080
  • airflow-worker: 執行調度程序給予的任務的工作人員
  • airflow-triggerer: 觸發器,可以延遲任務執行
  • airflow-init: 初始化的服務
  • airflow-cli: command line 指令工具
  • postgres: 資料庫
  • redis: 將訊息從排程器送到工作執行緒的代理
  • flowers: 用於監測環境的應用程式,可以從 http://localhost:5555 開啟

Ref: airflow 官方文件

啟動 Airflow

新增相關資料夾

mkdir -p ./dags ./logs ./plugins ./config
  • ./dags- 放 DAG 的資料夾
  • ./logs- 任務和排程器的執行紀錄
  • ./plugins- 可以將自訂外掛程式放在這裡
  • ./config- 可以新增自訂 log 解析器(這我也沒用過😂)

初始化資料庫

docker-compose up airflow-init

https://ithelp.ithome.com.tw/upload/images/20231001/20135427E5wMWjq2L7.png

執行的時候會看到這個 warning,但可以忽略,或是可以創.env檔案,裡面加入 AIRFLOW_UID=50000 來消除 warning

docker-airflow-airflow-init-1 exited with code 0
  • 跑完看到出現這行代表成功了

https://ithelp.ithome.com.tw/upload/images/20231001/20135427CZfkbXZXRF.png
輸入docker ps可以看到兩個資料庫已經跑起來了

建立並啟動 airflow 的所有服務

docker-compose up

https://ithelp.ithome.com.tw/upload/images/20231001/20135427bl8rwVjH0l.png

打開 webserver

https://ithelp.ithome.com.tw/upload/images/20231001/20135427twkDzyYmj8.png

  • 預設帳號密碼都是 airflow

https://ithelp.ithome.com.tw/upload/images/20231001/201354271iNsZvnVGP.png

  • 登入之後就會看到熟悉的畫面,和官方提供的許多範例

如果不想看到這些範例,可以去修改 docker-compose.yaml 當中的 AIRFLOW__CORE__LOAD_EXAMPLES: 'true',改成 false,重新啟動就好

進入已啟動的容器

可以用 docker ps 查看目前運行中的容器,複製 webserver 的容器 id,再進入容器查看內容

docker exec -it <container_id> bash
  • -t : 是啟動終端
  • -i : 是允許進行互動

進入容器之後,就像是平常的終端機 terminal 一樣,如果要離開,打 exit 就可以了

Docker Compose 常用指令

  • 下方提到的 container = 由 Docker Compose 管理的 Container,因為有可能同時使用其他方式建立 Container,但下方的語法只會控制資料夾下 YAML 檔案當中產生的 Container。
指令 用途
docker-compose build 從 Docker Compose 建立出 Docker image
docker-compose run 依照 build 的 Image 建立 Container
docker-compose up build+run,建立並啟動由 Container,每次執行都會重新建立 container 和 image
docker-compose down 停止並刪除 Container
docker-compose stop 停止 Container。
docker-compose start 啟動已經存在但目前是暫停的 container
docker-compose restart 重新啟動 Container

在啟動時,常常會用 docker-compose up -d,加上 -d 代表是讓這些 container 運行在背景

如果是所有儲存的紀錄都要刪除,可以執行 docker-compose down -v,代表 volumn 也要清空

結語

不知道有沒有發現用 docker-compose.yaml 開啟 airflow 服務其實超簡單,但是如果之後要學習操作和修改,還是要學習 docker 相關知識,之後安裝模組、連接 db、測試 dags,都會持續提到 docker 的相關操作,用久了就會覺得其實不難,只是不熟悉而已/images/emoticon/emoticon30.gif


上一篇
[Day15] 吃了容器果實的鯨魚拉布-Docker(2)
下一篇
[Day17] Airflow 連接到 Database 的三種方法
系列文
Airflow 是什麼? 能吃嗎 ? 數據水管工的超級蘑菇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言