Python, docker, docker compose
- Python
- docker & docker compose 설치
M1 Mac은 airflow 설치에 지원되지 않는 부분이 있어 도커환경을 사용합니다.
가상환경에서 설치합니다.
export AIRFLOW_HOME='/Users/bell.coco/airflow' # 사용자 경로로 수정
# 확인
echo $AIRFLOW_HOME
# 가상환경 생성
$ python3 -m venv venv-airflow
# 가상환경 실행
$ source venv-airflow/bin/activate
방법이 2개가 있습니다.
1. apache
2. bitnami
저자는 후자를 택했습니다. 선호하는 방식을 선택하여 사용하시면 됩니다.
이유 : bitnami에서 제공하는 Airflow 사용하였습니다.
Docker 이미지를 사용하여 편리하게 사용 가능
bitnami는 Apache에서 제공하는 프로젝트들을 실사용에 적합하도록 리패키징해서 배포함.
// 1. apache
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.3.3/docker-compose.yaml'
// 2. 아래 내용으로 docker-compose.yaml 파일 생성
version: '2'
services:
jupyter:
image: 'jupyter/base-notebook:latest'
volumes:
- ./dags:$AIRFLOW_HOME/dags
ports:
- "8888:8888"
command: "start-notebook.sh \
--NotebookApp.password='sha1:b70a055565b1:854e3f96f91c51cc0c91da371ea5dfbf7c1a61a1' \
--sudo mkdir $AIRFLOW_HOME/dags"
postgresql:
image: 'docker.io/bitnami/postgresql:10-debian-10'
volumes:
- 'postgresql_data:/bitnami/postgresql'
environment:
- POSTGRESQL_DATABASE=bitnami_airflow
- POSTGRESQL_USERNAME=bn_airflow
- POSTGRESQL_PASSWORD=bitnami1
- ALLOW_EMPTY_PASSWORD=yes
redis:
image: docker.io/bitnami/redis:6.0-debian-10
volumes:
- 'redis_data:/bitnami'
environment:
- ALLOW_EMPTY_PASSWORD=yes
airflow-scheduler:
image: docker.io/bitnami/airflow-scheduler:2-debian-10
environment:
- AIRFLOW_DATABASE_NAME=bitnami_airflow
- AIRFLOW_DATABASE_USERNAME=bn_airflow
- AIRFLOW_DATABASE_PASSWORD=bitnami1
- AIRFLOW_EXECUTOR=CeleryExecutor
- AIRFLOW_LOAD_EXAMPLES=no
- AIRFLOW__CORE__LOAD_DEFAULT_CONNECTIONS=false
- AIRFLOW__WEBSERVER__DEFAULT_UI_TIMEZONE=Asia/Seoul
- AIRFLOW__CORE__DEFAULT_TIMEZONE=Asia/Seoul
- AIRFLOW_WEBSERVER_HOST=airflow
volumes:
- ./dags:/opt/bitnami/airflow/dags
airflow-worker:
image: docker.io/bitnami/airflow-worker:2-debian-10
environment:
- AIRFLOW_DATABASE_NAME=bitnami_airflow
- AIRFLOW_DATABASE_USERNAME=bn_airflow
- AIRFLOW_DATABASE_PASSWORD=bitnami1
- AIRFLOW_EXECUTOR=CeleryExecutor
- AIRFLOW_LOAD_EXAMPLES=no
- AIRFLOW__CORE__LOAD_DEFAULT_CONNECTIONS=false
- AIRFLOW__WEBSERVER__DEFAULT_UI_TIMEZONE=Asia/Seoul
- AIRFLOW__CORE__DEFAULT_TIMEZONE=Asia/Seoul
- AIRFLOW_WEBSERVER_HOST=airflow
volumes:
- ./dags:/opt/bitnami/airflow/dags
airflow:
image: docker.io/bitnami/airflow:2-debian-10
environment:
- AIRFLOW_DATABASE_NAME=bitnami_airflow
- AIRFLOW_DATABASE_USERNAME=bn_airflow
- AIRFLOW_DATABASE_PASSWORD=bitnami1
- AIRFLOW_EXECUTOR=CeleryExecutor
- AIRFLOW_LOAD_EXAMPLES=no
- AIRFLOW__CORE__LOAD_DEFAULT_CONNECTIONS=false
- AIRFLOW__WEBSERVER__DEFAULT_UI_TIMEZONE=Asia/Seoul
- AIRFLOW__CORE__DEFAULT_TIMEZONE=Asia/Seoul
ports:
- '8080:8080'
volumes:
- ./dags:/opt/bitnami/airflow/dags
volumes:
postgresql_data:
driver: local
redis_data:
driver: local
mkdir -p ./dags ./logs ./plugins
echo -e "AIRFLOW_UID=$(id -u)" > .env
AIRFLOW_UID=50000
docker-compose -f docker-compose.yml up -d # -d는 백그라운드 실행을 의미
# 잘 실행되었는지 확인
docker ps