W tym poście pokaże Ci jak w 5 minut stworzyć w pełni działające środowisko, w którego skład wejdą:
- Apache Airflow WebServer
- Apache Airflow Worker
- Apache Airflow Scheduler
- Flower – internetowe narzędzie do monitorowania i zarządzania klastrami Celery
- Redis – to open source (licencjonowany BSD) magazyn struktur danych w pamięci, wykorzystywany jako baza danych, pamięć podręczna i broker komunikatów.
Skrypt docker-compose.yml
Utwórz plik docker-compose.yml i wklej poniższy skrypt. Następnie uruchom komende docker-compos up -d.
(Poniższy skrypt został zaczerpnięty ze strony Puckel)
version: '2.1' services: redis: image: 'redis:5.0.5' # command: redis-server --requirepass redispass postgres: image: postgres:9.6 environment: - POSTGRES_USER=airflow - POSTGRES_PASSWORD=airflow - POSTGRES_DB=airflow # Uncomment these lines to persist data on the local filesystem. # - PGDATA=/var/lib/postgresql/data/pgdata # volumes: # - ./pgdata:/var/lib/postgresql/data/pgdata webserver: image: puckel/docker-airflow:1.10.4 restart: always depends_on: - postgres - redis environment: - LOAD_EX=n - FERNET_KEY=46BKJoQYlPPOexq0OhDZnIlNepKFf87WFwLbfzqDDho= - EXECUTOR=Celery # - POSTGRES_USER=airflow # - POSTGRES_PASSWORD=airflow # - POSTGRES_DB=airflow # - REDIS_PASSWORD=redispass volumes: - ./dags:/usr/local/airflow/dags # Uncomment to include custom plugins # - ./plugins:/usr/local/airflow/plugins ports: - "8080:8080" command: webserver healthcheck: test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"] interval: 30s timeout: 30s retries: 3 flower: image: puckel/docker-airflow:1.10.4 restart: always depends_on: - redis environment: - EXECUTOR=Celery # - REDIS_PASSWORD=redispass ports: - "5555:5555" command: flower scheduler: image: puckel/docker-airflow:1.10.4 restart: always depends_on: - webserver volumes: - ./dags:/usr/local/airflow/dags # Uncomment to include custom plugins # - ./plugins:/usr/local/airflow/plugins environment: - LOAD_EX=n - FERNET_KEY=46BKJoQYlPPOexq0OhDZnIlNepKFf87WFwLbfzqDDho= - EXECUTOR=Celery # - POSTGRES_USER=airflow # - POSTGRES_PASSWORD=airflow # - POSTGRES_DB=airflow # - REDIS_PASSWORD=redispass command: scheduler worker: image: puckel/docker-airflow:1.10.4 restart: always depends_on: - scheduler volumes: - ./dags:/usr/local/airflow/dags # Uncomment to include custom plugins # - ./plugins:/usr/local/airflow/plugins environment: - FERNET_KEY=46BKJoQYlPPOexq0OhDZnIlNepKFf87WFwLbfzqDDho= - EXECUTOR=Celery # - POSTGRES_USER=airflow # - POSTGRES_PASSWORD=airflow # - POSTGRES_DB=airflow # - REDIS_PASSWORD=redispass command: worker
Sprawdź status kontenerów
Zanim przejdziesz do stron z interfejsem użytkownika, sprawdź czy wszystkie kontenery mają status “UP”. W tym celu użyj komendy:
docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------------------------------------------- airflow-docker_flower_1 /entrypoint.sh flower Up 0.0.0.0:5555->5555/tcp, 8080/tcp, 8793/tcp airflow-docker_postgres_1 docker-entrypoint.sh postgres Up 5432/tcp airflow-docker_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp airflow-docker_scheduler_1 /entrypoint.sh scheduler Up 5555/tcp, 8080/tcp, 8793/tcp airflow-docker_webserver_1 /entrypoint.sh webserver Up (healthy) 5555/tcp, 0.0.0.0:8080->8080/tcp, 8793/tcp airflow-docker_worker_1 /entrypoint.sh worker Up 5555/tcp, 8080/tcp, 8793/tcp
Interfejs użytkownika
Gdy wszystkie kontenery są uruchomione, możemy otworzyć kolejno:
- localhost:8080 – Apache Airflow UI
- localhost:5555 – Flower UI
Testowy DAG
W katalogu, gdzie uruchamialiśmy plik dokcer-compose.yml utworzyony został katalog “dags”. Utwórzmy w nim nasz testowy DAG. W tym celu przekieruję Cię do mojego innego posta, gdzie dokładnie opisałem jak to zrobić.
W skrócie: w katalogu “dags” należy utworzyć testowy dag (plik python). Automatycznie on pojawi się na w Airflow UI. Następnie wystarczy, że go po prostu uruchomisz. Dodatkowo sprawdź monitoring z poziomu Flower UI.

