728x90
Running Airflow in Docker — Airflow Documentation
airflow.apache.org
환경상 폐쇄망에서 에어플로우를 설치하게되었다.
폐쇄망에 docker(24.0.9)와 compose가 설치되어있는 상태를 가정했다.
1) 외부망에서 파일 준비
# docker image 준비
docker pull apache/airflow:2.8.1 #원하는 버전
docker pull postgres:13
docker pull redis:latest
docker save -o airflow.tar apache/airflow:2.8.1
docker save -o postgres.tar postgres:13
docker save -o redis.tar redis:latest
# docker compose yaml 파일 준비(버전 확인 필수)
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.8.1/docker-compose.yaml'
# 모든 파일을 폐쇄망 서버로 전송한다
scp * user@targetIP:/target_dir
2) 폐쇄망에서 docker image road - 관리자 권한 필요
docker load -i airflow.tar
docker load -i postgres.tar
docker load -i redis.tar
2-1) 폐쇄망에서 docker-compose.yaml 파일 수정 (option)
포트 변경과 docker image를 맞춰줘야한다.
포트는 airflow-webserver에서 바꿔주면되는데,
compose를 이용해서 설치하려면 컨테이너 포트 (:8080)을 수정하면안된다.
services:
postgres:
image: postgres:13 # 해당 docker image
environment:
POSTGRES_USER: airflow
POSTGRES_PASSWORD: airflow
POSTGRES_DB: airflow
volumes:
- postgres-db-volume:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "airflow"]
interval: 10s
retries: 5
start_period: 5s
restart: always
redis:
image: redis:latest # 해당 docker image
expose:
- 6379
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 30s
retries: 50
start_period: 30s
restart: always
airflow-webserver:
<<: *airflow-common
command: webserver
ports:
- "<PORT>:8080" # port 지정
healthcheck:
test: ["CMD", "curl", "--fail", "http://localhost:<PORT>/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
restart: always
depends_on:
<<: *airflow-common-depends-on
airflow-init:
condition: service_completed_successfully
설정 완료 후 저장
3) 데이터 베이스 초기화와 에어플로우 실행
docker compose up airflow-init
docker compose up
exited with code 0이 나오면 정상적으로 실행완료된것이다.
컨테이너들의 상태를 확인하면 완료
만약 yaml 파일을 수정후 재 설치가 필요하다면
docker compose down -v # 에어플로우 관련 컨테이너를 모두 삭제함
docker compose build --no-cache
docker compose up airflow-init
docker compose up -d
728x90