• 完全离线环境下安装Docker,Dockercompose,Airflow


    准备工作

    下载docker:https://download.docker.com/linux/static/stable/x86_64

    我下载的是docker-20.10.6.tgz

    下载docker-compose:https://github.com/docker/compose/releases

    我下载的是docker-compose-linux-x86_64

    构建airflow镜像:

    Dockerfile

    FROM python:3.8.12-buster
    ENV TZ="Asia/Shanghai"
    
    RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
    RUN sed -i s@/security.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
    RUN apt-get clean
    RUN apt-get -y update
    RUN apt-get -y install vim
    RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    RUN pip install --upgrade pip
    COPY requirements.txt /requirements.txt
    RUN pip install -r /requirements.txt
    RUN rm /requirements.txt
    

    requirements

    apache_airflow==2.2.2
    apache-airflow-providers-docker==2.3.0
    psycopg2==2.9.2
    pandas==1.3.5
    

    build和save

     docker build -t airflow:1.0 .
     docker save -o ./airflow.tar airflow:1.0
    

    下载postgres数据库

    docker pull postgres:13
    docker save -o ./ postgres:13
    

    开始安装

    安装docker

    创建docker.service

    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network-online.target firewalld.service
    Wants=network-online.target
    
    [Service]
    Type=notify
    # the default is not to use systemd for cgroups because the delegate issues still
    # exists and systemd currently does not support the cgroup feature set required
    # for containers run by docker
    ExecStart=/usr/bin/dockerd
    ExecReload=/bin/kill -s HUP $MAINPID
    # Having non-zero Limit*s causes performance problems due to accounting overhead
    # in the kernel. We recommend using cgroups to do container-local accounting.
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    # Uncomment TasksMax if your systemd version supports it.
    # Only systemd 226 and above support this version.
    #TasksMax=infinity
    TimeoutStartSec=0
    # set delegate yes so that systemd does not reset the cgroups of docker containers
    Delegate=yes
    # kill only the docker process, not all processes in the cgroup
    KillMode=process
    # restart the docker process if it exits prematurely
    Restart=on-failure
    StartLimitBurst=3
    StartLimitInterval=60s
    
    [Install]
    WantedBy=multi-user.target
    

    依次执行以下命令

    # 解压文件
    tar -xvf docker-20.10.6.tgz
    # 移动docker到bin下
    cp docker/* /usr/bin/
    # 移动docker.service
    cp docker.service /etc/systemd/system/
    # 设置权限
    chmod +x /etc/systemd/system/docker.service
    # 重新加载配置文件
    systemctl daemon-reload
    # 启动docker
    systemctl start docker
    # 开机自启
    systemctl enable docker.service
    # 完成
    docker -v
    

    安装docker-compose

    mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
    

    添加权限

    chmod +x /usr/local/bin/docker-compose
    

    测试

    docker-compose -v
    

    安装airflow

    创建docker-compose.yml

    version: '3.8'
    x-airflow-common:
      &airflow-common
      image: airflow:1.0
      environment:
        - AIRFLOW__CORE__EXECUTOR=LocalExecutor
        - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres:5432/airflow
        - AIRFLOW__CORE__LOAD_EXAMPLES=False
        - AIRFLOW__CORE__DEFAULT_TIMEZONE=Asia/Shanghai
        - AIRFLOW__WEBSERVER__DEFAULT_UI_TIMEZONE=Asia/Shanghai
        - TZ=Asia/Shanghai
        - POSTGRES_ENGINE_STRING=postgresql+psycopg2://postgres:BBxy73i4YUGyHQtsDuQH2qe11ID624HETNXsdCbq@192.168.31.214:5432/stock
        - DOCKER_URL=tcp://192.168.31.214:2375
      volumes:
        - /root/airflow/dags:/root/airflow/dags
        - /root/airflow/logs:/root/airflow/logs
      depends_on:
        - postgres
    
    services:
      postgres:
        container_name: airflow_postgres
        image: postgres:13
        environment:
          - POSTGRES_USER=airflow
          - POSTGRES_PASSWORD=airflow
          - POSTGRES_DB=airflow
          - POSTGRES_PORT=5432
        volumes:
          - /root/airflow/postgres/data:/var/lib/postgresql/data
        ports:
          - 54321:5432
      airflow-init:
        <<: *airflow-common
        container_name: airflow_init
        entrypoint: /bin/bash
        command:
          - -c
          - airflow db check-migrations || ( airflow db init &&
            airflow users create
            --role Admin
            --username airflow
            --password airflow
            --email airflow@airflow.com
            --firstname airflow
            --lastname airflow )
        restart: on-failure
    
      airflow-webserver:
        <<: *airflow-common
        command: airflow webserver
        ports:
          - 8080:8080
        container_name: airflow_webserver
        restart: always
    
      airflow-scheduler:
        <<: *airflow-common
        command: airflow scheduler
        container_name: airflow_scheduler
        restart: always
        depends_on:
          airflow-init:
            condition: service_completed_successfully
    

    导入docker镜像

    docker load --input airflow.tar
    docker load --input postgres.tar
    

    启动docker

    docker-compose up -d
    

    启动完成后,打开http://192.168.31.214:8080就可以看到airflow了。

  • 相关阅读:
    [转]Dokuwiki使用感受
    [转]认识与入门Markdown
    [转]2015深度学习回顾:ConvNet、Caffe、Torch及其他
    [转]Dokuwiki插件与主题推荐
    [转]okuwiki布署小记
    PHP环境配置
    keydown和keypress
    JavaScript优化参考
    IE兼容性标签和条件注释
    nodejs 简单http 文件上传demo
  • 原文地址:https://www.cnblogs.com/harrylyx/p/15993629.html
Copyright © 2020-2023  润新知