Compose 是組合或組成的意思,Docker Compose 就是代表組合多個 Docker 容器,可以直接用 YAML 檔案定義,也能一次運行多個 Docker 容器,如果沒有 Docker Compose,在操作 Docker 容器時,只能一個一個運行 Container,如果要重開或是停止也會很麻煩。
安裝 Docker Desktop 同時也會 安裝 Docker Compose
cd ~/Desktop
mkdir docker-airflow
cd docker-airflow
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'
接著輸入 ls
,就可以看到資料夾底下有 docker-compose.yaml
的檔案
Docker Compose 可以分為四個區塊:
Version 是必須的,Services 至少建立一個,Volumes 和 Networks 都是進階選用的,有需要再設定
大部分在前面都提過了,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:
build: .
也可以另外加上Dockfile,安裝需要的模組。Ref: airflow 官方文件
mkdir -p ./dags ./logs ./plugins ./config
docker-compose up airflow-init
執行的時候會看到這個 warning,但可以忽略,或是可以創
.env
檔案,裡面加入AIRFLOW_UID=50000
來消除 warning
docker-airflow-airflow-init-1 exited with code 0
輸入docker ps
可以看到兩個資料庫已經跑起來了
docker-compose up
如果不想看到這些範例,可以去修改
docker-compose.yaml
當中的AIRFLOW__CORE__LOAD_EXAMPLES: 'true'
,改成 false,重新啟動就好
可以用 docker ps
查看目前運行中的容器,複製 webserver 的容器 id,再進入容器查看內容
docker exec -it <container_id> bash
進入容器之後,就像是平常的終端機 terminal 一樣,如果要離開,打 exit
就可以了
指令 | 用途 |
---|---|
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 的相關操作,用久了就會覺得其實不難,只是不熟悉而已