Mac經過docker一鍵部署airflow

Airflow部署及使用

因爲工做中須要使用airflow進行開發,網上搜索「mac系統在docker中搭建airflow」的文章真的不多,並且寫的又不夠詳細。遂本身摸索搭建成功後便分享給你們使用,即有循序漸進「一步一步」的操做,也有「一鍵初始化」腳本,你們根據本身的實際狀況進行操做。python

一、Dockerhub查看鏡像地址

# 若是你比較懶能夠使用最後的「airflow一鍵初始化腳本」,mac電腦通用
https://hub.docker.com/r/puckel/docker-airflow/tags?page=1&ordering=last_updated

二、拉取docker鏡像

# 執行鏡像下載命令 
docker pull puckel/docker-airflow:latest

三、在宿主機建立外掛文件夾

# 獲取當前系統的用戶名,例如:jason 
echo $USER 

# 執行上述命名將獲得的用戶名替換在 $USER 的位置 
sudo mkdir -p -v /data/docker/volumes/airflow/{dags,logs} && sudo chown -R $USER /data/docker/volumes/airflow/{dags,logs}

四、建立docker容器

# 建立容器
docker run -p 8080:8080  -v /data/docker/volumes/airflow/dags:/usr/local/airflow/dags -v /data/docker/volumes/airflow/logs:/usr/local/airflow/logs --name airflow -d puckel/docker-airflow:latest

命令說明:
-d puckel/docker-airflow:latest #交互運行容器,讓容器以守護態(daemonized)形式在後臺運行
--name airflow #給新建立的容器命名即容器別名,如:airflow
-p 8080:8080  #端口映射,此處映射主機8080端口到容器airflow的8080端口
-v /data/docker/volumes/airflow/airflow.cfg:/usr/local/airflow/airflow.cfg   #掛載主配置文件
-v /data/docker/volumes/airflow/dags:/usr/local/airflow/dags  #掛載資源路徑
-v /data/docker/volumes/airflow/logs:/usr/local/airflow/logs  #掛載日誌文件

五、從新建立docker容器

此步驟主要是將容器中的airflow.cfg拷貝出來,方便airflow.cfg後續修改;mysql

5.一、查看airflow容器是否正常啓動

# 查看容器是否正常,如 running 即啓動成功
docker inspect airflow | jq -r '.[].State.Status'

5.二、啓動成功才能將容器中的airflow.cfg拷貝出來修改

#一、查看容器ID,例如:$container_id 
docker ps -a | grep 'airflow' |awk '{print $1}' 

#二、使用docker拷貝(命令參考,可忽略):docker cp source_path target_path 
docker cp $container_id:/usr/local/airflow/airflow.cfg /data/docker/volumes/airflow 

#三、拷貝airflow.cfg到指定目錄,命令集成(推薦用,一鍵搞定省心) 
sudo docker cp $(docker ps -a | grep 'airflow' |awk '{print $1}'):/usr/local/airflow/airflow.cfg /data/docker/volumes/airflow

5.三、刪除容器從新建立,非刪除鏡像

此步驟主要是將/usr/local/airflow/airflow.cfg外掛到宿主機中git

#一、刪除容器示例:docker stop $image_alias && docker rm $image_alias 
docker stop airflow && docker rm airflow 

#二、從新建立docker容器 
docker run -p 8080:8080 -v=/data/docker/volumes/airflow/airflow.cfg:/usr/local/airflow/airflow.cfg -v=/data/docker/volumes/airflow/dags:/usr/local/airflow/dags -v=/data/docker/volumes/airflow/logs:/usr/local/airflow/logs --name airflow -d puckel/docker-airflow:latest 

#三、查看容器airflow掛載到宿主機的地址 
docker inspect airflow | jq -r '.[].HostConfig.Binds' 

#四、查看容器是否正常 
docker ps

六、進入docker容器

docker exec -it airflow /bin/bash

-d:分離模式,在後臺運行 
-i:交互模式,即便沒有附加也保持 STDIN 打開 
-t:分配一個僞終端 
/bin/bash:運行命令 bash shell

七、sqlite數據庫初始化

(生產不建議使用,但可用於我的測試。生產推薦使用mysql,若是使用mysql能夠跳過sqlite部分)github

#一、使用默認的sqlite+SequentialExecutor啓動 
airflow initdb 

#二、出現錯誤: 
airflow.exceptions.AirflowException: Could not create Fernet object: Incorrect padding 

#三、解決辦法:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" 

#四、將第3步執行的結果替換到export中 
export AIRFLOW__CORE__FERNET_KEY=第3步執行的結果

#五、從新執行初始化數據庫命令 
airflow initdb 

#六、啓動成功後,便可正常訪問 
http://localhost:8080/admin/

avatar

八、修改airflow的airflow.cfg配置

提供手動修改和命令行修改的功能sql

#一、查看docker中mysql的IP地址,替換在以下的IP地址中
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql

#二、手動修改(使用命令行修改可跳過此步)
executor = LocalExecutor 
# 示例:sql_alchemy_conn="mysql://${USER}:${PASSWORD}@${HOST}:${PORT}/${DB_INSTANCE}${DB_EXTRAS}" 
sql_alchemy_conn = mysql://airflow:airflow@172.17.0.2:3306/airflow 

#三、命令行修改(使用手動修改可跳過此步)
sudo sed -i \"\" 's/executor = SequentialExecutor/executor = LocalExecutor/g' /data/docker/volumes/airflow/airflow.cfg 
sudo sed -i \"\" 's/\# sql_alchemy_conn = sqlite:\/\/\/\/tmp\/airflow.db/sql_alchemy_conn = mysql:\/\/airflow:airflow\@172.17.0.2:3306\/airflow/g' /data/docker/volumes/airflow/airflow.cfg 

#四、查看修改是否成功
cat /data/docker/volumes/airflow/airflow.cfg | grep 'executor ='
cat /data/docker/volumes/airflow/airflow.cfg | grep 'sql_alchemy_conn'

九、mysql數據庫初始化

部署方式:docker+airflow+mysql+LocalExecutordocker

9.一、查看docker中mysql的IP地址

若是你的mysql也是安裝在docerk中的話,則最好操做以下命令:shell

# 查看docker中mysql的IP地址,主要用於mysql建立新用戶受權時使用,
# 命令中的 mysql 是docker中安裝數據庫時的別名,請根據實際狀況自行修改
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql

9.二、登陸mysql並建立專屬的airflow數據庫

#新建名字爲<airflow>的數據庫
CREATE DATABASE airflow; 

#一、新建用戶`airflow`,密碼爲`airflow`, 該用戶對數據庫`airflow`有徹底操做權限 
#二、將9.1步驟執行命令行的結果替換在 $IPAddress 的位置,也能夠將IP最後一位換成%,例如:172.17.0.% 
GRANT all privileges on airflow.* TO 'airflow'@'$IPAddress' IDENTIFIED BY 'airflow'; 
FLUSH PRIVILEGES; 

# 查看受權(經常使用操做指令可不執行) 
select host,user from mysql.`user` where user='airflow'; 

# 刪除受權(經常使用操做指令可不執行) 
DROP USER 'airflow'@'$IPAddress';

9.三、修改mysql的my.cnf配置

# 因爲airflow初始化數據庫時須要用到以下參數,請自行添加 
[mysqld]
explicit_defaults_for_timestamp = 1

9.四、初始化mysql數據庫

# 一、進入docker容器
docker exec -it airflow /bin/bash 

# 二、先執行數據庫重置命令,再執行數據庫初始化命令 
airflow reset 
airflow initdb 

# 三、出現錯誤: 
airflow.exceptions.AirflowException: Could not create Fernet object: Incorrect padding 

# 四、解決辦法: 
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" 

# 五、將第3步執行的結果替換到export中 
export AIRFLOW__CORE__FERNET_KEY=第3步執行的結果

# 六、查看環境變量是否設置成功 
echo $AIRFLOW__CORE__FERNET_KEY 

# 七、從新執行初始化數據庫命令 
airflow initdb 

# 八、啓動成功後,便可正常訪問 
http://localhost:8080/admin/

十、airflow一鍵初始化腳本

注意:執行《一鍵初始化腳本》時須要先配置mysql環境和建立airflow數據庫用戶,即以下操做;數據庫

一、先執行9.一、9.二、9.3等步驟的操做,執行完成後請檢查是否正確;bash

二、先啓動airflow容器,而後再執行9.4步驟的操做;測試

三、執行完成後便可訪問:http://localhost:8080/admin/

相關文章
相關標籤/搜索