限時公開

【🔒 MLOps - Airflow】使用DAG流程呼叫Docker Operator來執行任務

閱讀時間約 7 分鐘
raw-image

我們在「【🔒 MLOps - Airflow】使用docker compose架設Airflow」有教您如何使用Docker來架設Airflow的環境, 而這個章節我們準備在DAG的流程中設計一個呼叫Docker去執行作業的節點, 這對於我們容器化的工作流會非常有幫助, 而且運行過程中也減少對主機的干擾, 那就讓我們來好好的理解一番吧!


在進入主題之前先來個預告, 預計今天我們會學到這幾個部份:

raw-image


下載官方compose檔

curl -LfO '<https://airflow.apache.org/docs/apache-airflow/2.10.0/docker-compose.yaml>'




首先我們寫一段DAG來叫Python的Container執行程式碼

raw-image


這邊我們設計一個名為「docker_operator_example」的DAG, 很簡單的一個流程, 僅使用「python:3-alpine」這個Docker Image並執行python的指令。

from airflow import DAG
from airflow.providers.docker.operators.docker import DockerOperator
from airflow.utils.dates import days_ago

default_args = {
'owner': 'airflow',
'start_date': days_ago(1),
}

with DAG(
dag_id='docker_operator_example',
default_args=default_args,
schedule_interval=None,
catchup=False,
) as dag:

run_docker = DockerOperator(
task_id='run_docker',
image='python:3-alpine', # 要運行的 Docker 映像
command='python -c \\'print("Hello, World!")\\'', # 容器中要運行的命令
docker_url='unix://var/run/docker.sock', # Docker daemon 的 URL
network_mode='bridge', # Docker 網絡模式
auto_remove=True, # 在運行結束後自動移除容器
)

run_docker


接著我們把這個「docker_operator_example.py」放到./dags底下, 目錄大概會是這樣:

|- dags
|- docker_operator_example.py
|- compose.yml



接著啟動服務並執行看看這個DAG


我們用以下指令來啟動服務:

docker compose up -d


打開 http://localhost:8080/home 並找到「docker_operator_example」的DAG, 並且在右方的按鈕執行它。


奇怪! 執行完之後怎麼發生「Failed to establish connection to any given Docker hosts.」 這樣的錯誤訊息?

raw-image



這個錯誤我們專門開設一篇「【MLOps - Airflow 疑難雜症】在Airflow Container裡面跑Docker Operator」來說明原因, 詳細原因請閱讀該文章。


如何讓Docker互通

由於我們的Airflow是在Container環境底下, 當DAG使用Docker Operator之後, 我們Container裡面要如何與外界溝通? 這時候就得透過一個重要的 docket.sock 來進行了, 我們在「【MLOps - Airflow 疑難雜症】在Airflow Container裡面跑Docker Operator」分享到, 有興趣的朋友也歡迎閱讀我們的疑難排解過程, 裡面主要在講述DockerOperator來執行任務時會遇到的困難點及解決方案, 在這邊我們就不贅述了, 我們直接選擇docker proxy的方式來解這問題。

raw-image




只要兩個步驟就能完成:

  1. 加入docker-socket-proxy到compose。
raw-image
  1. DAG改用docker-socket-proy的連線位置。
run_docker = DockerOperator(
task_id='run_docker',
image='python:3-alpine', # 要運行的 Docker 映像
command='python -c \\'print("Hello, World!")\\'', # 容器中要運行的命令
docker_url='TCP://docker-socket-proxy:2375', # Docker daemon 的 URL
network_mode='bridge', # Docker 網絡模式
auto_remove=True, # 在運行結束後自動移除容器
)


結語

由於我們的airflow架設於容器化的環境之下, 因此如果所有的任務都要用容器化來完成的話勢必會需要了解Docker In Docker的狀況, 而我們這邊就使用了Docker Proxy的代理方式來幫我們呼叫外部的容器完成任務, 當然還有更多方法可以使用, 也歡迎您與我們分享更多的解決方案, 讓我們一同交流學習!

113會員
256內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
為什麼我們只推薦docker的環境? 因為透過容器化可以讓我們各個組件安裝的套件各自獨立, 不會發生早期常常衝突的狀況, 當然我們也可以用conda來隔開, 但它的層面僅限於python環境, 我們需要的是整個os環境, 因此docker會是我們優先考慮的選項之一。 👉 在我們開始之前…
我們在「【MLOps - MLflow】AI模型實驗管理的超入門簡介」有介紹到模型實驗的追蹤管理平台, 雖然可以幫助我們自動化記錄實驗參數、模型…等數據, 但我們也會希望模型的訓練可以更加的自動化, 而Airflow正好就具備流程設計與管理的功能, 我們可以彈性的設計在某個時間點從某個數據集自動訓練
為什麼我們只推薦docker的環境? 因為透過容器化可以讓我們各個組件安裝的套件各自獨立, 不會發生早期常常衝突的狀況, 當然我們也可以用conda來隔開, 但它的層面僅限於python環境, 我們需要的是整個os環境, 因此docker會是我們優先考慮的選項之一。 👉 在我們開始之前…
我們在「【MLOps - MLflow】AI模型實驗管理的超入門簡介」有介紹到模型實驗的追蹤管理平台, 雖然可以幫助我們自動化記錄實驗參數、模型…等數據, 但我們也會希望模型的訓練可以更加的自動化, 而Airflow正好就具備流程設計與管理的功能, 我們可以彈性的設計在某個時間點從某個數據集自動訓練
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
我們在「【Message Queue - Kafka】不斷的試誤…, 用Docker來嘗試安裝Kafka」有介紹如何架設kafka, 其中我們使用環境變數來進行kafka的配置, 但除了環境變數之外, 其實還能夠用檔案配置的方式來對kafka進行配置, 如此一來我們就可以將配置檔與啟動檔完全分開,
Thumbnail
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
Thumbnail
前言 大家好上次我們教了如何下載 Docker Image 使用,今天我們要教如何產出自己的 Image,這次會使用一個 Dockerfile 範例,自行打包 Docker Image,初步練習使用 Docker 指令 下載 Dockerfile 教學檔案 在這裡我已經幫忙寫好一個 Docke
Thumbnail
前言 上次講到 Dockerfile、DockerImage、Docker Container 他們之間的關係,今天我們要來熟悉 Docker Image 如何使用,教你如何抓取雲端上的 Docker Image, Docker Image 下載來源 當我們今天要要使用 Docker Imag
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
我們在「【Message Queue - Kafka】不斷的試誤…, 用Docker來嘗試安裝Kafka」有介紹如何架設kafka, 其中我們使用環境變數來進行kafka的配置, 但除了環境變數之外, 其實還能夠用檔案配置的方式來對kafka進行配置, 如此一來我們就可以將配置檔與啟動檔完全分開,
Thumbnail
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
Thumbnail
前言 大家好上次我們教了如何下載 Docker Image 使用,今天我們要教如何產出自己的 Image,這次會使用一個 Dockerfile 範例,自行打包 Docker Image,初步練習使用 Docker 指令 下載 Dockerfile 教學檔案 在這裡我已經幫忙寫好一個 Docke
Thumbnail
前言 上次講到 Dockerfile、DockerImage、Docker Container 他們之間的關係,今天我們要來熟悉 Docker Image 如何使用,教你如何抓取雲端上的 Docker Image, Docker Image 下載來源 當我們今天要要使用 Docker Imag
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇