当前位置 博文首页 > 逍遥酒鬼:Mac通过docker一键部署airflow

    逍遥酒鬼:Mac通过docker一键部署airflow

    作者:逍遥酒鬼 时间:2021-02-03 18:24

    目录
    • Airflow部署及使用
      • 1、Dockerhub查看镜像地址
      • 2、拉取docker镜像
      • 3、在宿主机创建外挂文件夹
      • 4、创建docker容器
      • 5、重新创建docker容器
        • 5.1、查看airflow容器是否正常启动
        • 5.2、启动成功才能将容器中的airflow.cfg拷贝出来修改
        • 5.3、删除容器重新创建,非删除镜像
      • 6、进入docker容器
      • 7、sqlite数据库初始化
      • 8、修改airflow的airflow.cfg配置
      • 9、mysql数据库初始化
        • 9.1、查看docker中mysql的IP地址
        • 9.2、登录mysql并创建专属的airflow数据库
        • 9.3、修改mysql的my.cnf配置
        • 9.4、初始化mysql数据库
      • 10、airflow一键初始化脚本

    Airflow部署及使用

    由于工作中需要使用airflow进行开发,网上搜索“mac系统在docker中搭建airflow”的文章真的很少,而且写的又不够详细。遂自己摸索搭建成功后便分享给大家使用,即有按部就班“一步一步”的操作,也有“一键初始化”脚本,大家根据自己的实际情况进行操作。

    1、Dockerhub查看镜像地址

    # 如果你比较懒可以使用最后的“airflow一键初始化脚本”,mac电脑通用
    https://hub.docker.com/r/puckel/docker-airflow/tags?page=1&ordering=last_updated
    

    2、拉取docker镜像

    # 执行镜像下载命令 
    docker pull puckel/docker-airflow:latest
    

    3、在宿主机创建外挂文件夹

    # 获取当前系统的用户名,例如:jason 
    echo $USER 
    
    # 执行上述命名将得到的用户名替换在 $USER 的位置 
    sudo mkdir -p -v /data/docker/volumes/airflow/{dags,logs} && sudo chown -R $USER /data/docker/volumes/airflow/{dags,logs}
    

    4、创建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  #挂载日志文件
    

    5、重新创建docker容器

    此步骤主要是将容器中的airflow.cfg拷贝出来,方便airflow.cfg后续修改;

    5.1、查看airflow容器是否正常启动

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

    5.2、启动成功才能将容器中的airflow.cfg拷贝出来修改

    #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
    

    5.3、删除容器重新创建,非删除镜像

    此步骤主要是将/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
    

    6、进入docker容器

    docker exec -it airflow /bin/bash
    
    -d:分离模式,在后台运行 
    -i:交互模式,即使没有附加也保持 STDIN 打开 
    -t:分配一个伪终端 
    /bin/bash:运行命令 bash shell
    

    7、sqlite数据库初始化

    (生产不建议使用,但可用于个人测试。生产推荐使用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/
    

    avatar