当前位置 博文首页 > 逍遥酒鬼:Mac通过docker一键部署airflow
由于工作中需要使用airflow进行开发,网上搜索“mac系统在docker中搭建airflow”的文章真的很少,而且写的又不够详细。遂自己摸索搭建成功后便分享给大家使用,即有按部就班“一步一步”的操作,也有“一键初始化”脚本,大家根据自己的实际情况进行操作。
# 如果你比较懒可以使用最后的“airflow一键初始化脚本”,mac电脑通用
https://hub.docker.com/r/puckel/docker-airflow/tags?page=1&ordering=last_updated
# 执行镜像下载命令
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 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 #挂载日志文件
此步骤主要是将容器中的airflow.cfg拷贝出来,方便airflow.cfg后续修改;
# 查看容器是否正常,如 running 即启动成功
docker inspect airflow | jq -r '.[].State.Status'
#1、查看容器ID,例如:$container_id
docker ps -a | grep 'airflow' |awk '{print $1}'
#2、使用docker拷贝(命令参考,可忽略):docker cp source_path target_path
docker cp $container_id:/usr/local/airflow/airflow.cfg /data/docker/volumes/airflow
#3、拷贝airflow.cfg到指定目录,命令集成(推荐用,一键搞定省心)
sudo docker cp $(docker ps -a | grep 'airflow' |awk '{print $1}'):/usr/local/airflow/airflow.cfg /data/docker/volumes/airflow
此步骤主要是将/usr/local/airflow/airflow.cfg外挂到宿主机中
#1、删除容器示例:docker stop $image_alias && docker rm $image_alias
docker stop airflow && docker rm airflow
#2、重新创建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
#3、查看容器airflow挂载到宿主机的地址
docker inspect airflow | jq -r '.[].HostConfig.Binds'
#4、查看容器是否正常
docker ps
docker exec -it airflow /bin/bash
-d:分离模式,在后台运行
-i:交互模式,即使没有附加也保持 STDIN 打开
-t:分配一个伪终端
/bin/bash:运行命令 bash shell
(生产不建议使用,但可用于个人测试。生产推荐使用mysql,如果使用mysql可以跳过sqlite部分)
#1、使用默认的sqlite+SequentialExecutor启动
airflow initdb
#2、出现错误:
airflow.exceptions.AirflowException: Could not create Fernet object: Incorrect padding
#3、解决办法:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
#4、将第3步执行的结果替换到export中
export AIRFLOW__CORE__FERNET_KEY=第3步执行的结果
#5、重新执行初始化数据库命令
airflow initdb
#6、启动成功后,即可正常访问
http://localhost:8080/admin/