1. 윈도우에는 바로 설치가 안되므로 WSL을 설치
https://learn.microsoft.com/ko-kr/windows/wsl/install
wsl --install
2. 설치한 WSL에 도커를 설치
https://docs.docker.com/engine/install/ubuntu/
충돌하는 모든 패키지를 제거하려면 다음 명령을 실행
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
2.1. Docker apt 저장소를 설정
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
2.2. Docker 패키지를 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
2.3. 이미지 를 실행하여 Docker 엔진 설치가 성공했는지 확인
sudo docker run hello-world
간혹 이 부분에서
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. & System has not been booted with systemd as init system (PID 1). Can't operate.
이런 에러가 뜨면 wsl을 최신 버전으로 업데이트 하면 된다.
wsl --update
3. 설치한 도커에 에어플로우 설치
https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html
Docker 엔진에 최소 4GB 메모리(이상적으로는 8GB)를 할당해야 함.
다음 명령을 실행하여 메모리가 충분한지 확인.
docker run --rm "debian:bullseye-slim" bash -c 'numfmt --to iec $(echo $(($(getconf _PHYS_PAGES) * $(getconf PAGE_SIZE))))'
Docker Compose에 Airflow를 배포하려면 docker-compose.yaml 을 가져와야 함.
curl -LfO '<https://airflow.apache.org/docs/apache-airflow/2.8.1/docker-compose.yaml>'
이 파일에는 여러 서비스 정의가 포함되어 있다.
- airflow-scheduler- 스케줄러는 모든 작업과 DAG를 모니터링한 다음 종속성이 완료되면 작업 인스턴스를 트리거
- airflow-webserver- 웹서버 이용 가능 http://localhost:8080.
- airflow-worker- 스케줄러가 지정한 작업을 실행하는 작업자
- airflow-triggerer- 트리거러는 지연 가능한 작업에 대해 이벤트 루프를 실행
- airflow-init- 초기화 서비스
- postgres- 데이터베이스.
- redis- redis - 스케줄러에서 작업자로 메시지를 전달하는 브로커
Linux 에서 빠른 시작은 호스트 사용자 ID를 알아야 하며 그룹 ID를 0으로 설정해야 함.
그렇지 않으면 dags, 로그 및 플러그인에서 생성된 파일은 루트 사용자 소유권으로 생성된다.
docker-compose에 대해 구성해야 한다.
mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env
다른 운영 체제의 경우 AIRFLOW_UID가 설정되지 않았다는 경고가 표시될 수 있지만 무시해도 된다.
경고를 제거하려면 다음 내용을 사용하여 docker-compose.yaml과 동일한 폴더에 .env 파일을 수동으로 생성할 수도 있다.
AIRFLOW_UID=50000
데이터베이스 초기화(Initialize the database)
모든 운영 체제 에서 데이터베이스 마이그레이션을 실행하고 첫 번째 사용자 계정을 만들어야 한다.
sudo docker compose up airflow-init
실행
sudo docker compose up
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
247ebe6cf87a apache/airflow:2.8.1 "/usr/bin/dumb-init …" 3 minutes ago Up 3 minutes (healthy) 8080/tcp compose_airflow-worker_1
ed9b09fc84b1 apache/airflow:2.8.1 "/usr/bin/dumb-init …" 3 minutes ago Up 3 minutes (healthy) 8080/tcp compose_airflow-scheduler_1
7cb1fb603a98 apache/airflow:2.8.1 "/usr/bin/dumb-init …" 3 minutes ago Up 3 minutes (healthy) 0.0.0.0:8080->8080/tcp compose_airflow-webserver_1
74f3bbe506eb postgres:13 "docker-entrypoint.s…" 18 minutes ago Up 17 minutes (healthy) 5432/tcp compose_postgres_1
0bd6576d23cb redis:latest "docker-entrypoint.s…" 10 hours ago Up 17 minutes (healthy) 0.0.0.0:6379->6379/tcp compose_redis_1
4. 에어플로우 웹 서버 접속
ID : airflow
PASS : airflow
FIN.