본문 바로가기
동굴 속 정보

AirFlow Manual on Docker (1)

by 도시형닌자 2020. 12. 20.

[ 도커 이미지 버전 ]

도커는 가상머신을 지원한다. 여러 OS를 VM으로 올리지 않고 서비스만 올려서 사용할 수 있기 때문에 테스트할 때나 서비스 운영 할 때 많이 사용된다. 다양한 환경을 지원하기 위해 도커 이미지는 버전 또한 다양한다. 다양한 버전 중에 stretch나 buster를 받아서 사용하는 것이 편리하다. 작은 용량으로 사용하기 위함이 아니라면 굳이 다른 버전을 쓸 이유는 없을 것 같다. 

 

URL : hub.docker.com/_/python

- buster : 데비안 릴리즈(10.4) 코드명
- slim-buster : 최소 패키지로 문제 발생 가능성 높음
- stretch : 데비안 릴리즈(9) 코드명
- bookworm & bullseye : 비안정적 버전, 사용X
- slim-stretch : 최소 패키지로 문제 발생 가능성 높음
- alpine3 : 최소한의 작은 이미지로 디버그가 어려움, 작은 공간 적극 권장, apt-get 없고 apk 사용
- windowsservercodere-ltsc2016 : 윈도우 사용자에게는 최고의 이미지

 

 

[ 도커 명령어 및 Airflow 설치 ]

 

도커를 아래 URL에 방문하여 OS에 맞게 다운로드하고 설치하면된다. 그 후 글에 나와있는 명령어를 순서대로 실행하면 airflow를 실행할 수 있고 DAG까지 생성해서 만들 수 있다. DAG는 Airflow에서 사용하는 핵심 기능만을 코드로 구현하고 테스트할 수 있다. 코드는 파이썬으로 제공한다.

URL : www.docker.com/get-started

 

 

- Docker image 가져오기

docker pull puckel/docker-airflow

     => docker pull [이미지 이름]:[버전]
     => latest 를 쓰면 최신 버전으로 받을수 있다.

 

 

- image에서 container 생성 후 실행

docker run -d -p 8080:8080 -it \
-v /C/users/dorumugs/docker/airflow:/shared \
-e TZ=Asia/Seoul \
-e LC_ALL=C.UTF-8 \
-e FERNET_KEY="3aD2RKw_pwGaQ8cFxTl759jYTR1JfZtpLI_DleDGiZ4=" \
--name airflow_v1 \
puckel/docker-airflow

// FERNET_KEY="3aD2RKw_pwGaQ8cFxTl759jYTR1JfZtpLI_DleDGiZ4=" 는 아래 파이썬 코드로 만든 값인데 Postgre 사용할 때 사용한다.
// python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"

     => -d 옵션으로 서비스를 데몬으로 동작하여 컨테이너가 백그라운드 실행된다.

     => -p 옵션으로 로컬 8080 포트와 컨테이너 8080 포트를 연결한다.

     => -it 옵션은 bash shell을 사용하기 위한 옵션으로 Stdin과 TTY 모드를 말한다.

     => -v 옵션은 로컬 폴더:컨테이너 폴더에 공유 폴더를 만들어서 로컬과의 교류를 원활하게 한다.

     => -e 옵션은 환경변수를 설정하는데 PATH, 시간, 키값 등을 넣어 사용에 편리를 더한다.

     => --name 옵션으로 생성한 컨테이너의 이름을 부여한다.

     => 마지막으로 다운 받은 이미지를 입력하면 된다.

 

 

- 컨테이너 리스트 확인

docker ps -a

 

 

- 컨테이너 실행 & 종료 & 접속

docker start airflow_v1
docker stop airflow_v1
docker attach airflow_v1

 

 

- root 계정으로 bash 실행 후 필요 서비스 설치

컨테이너를 처음 생성하면 vi와 netstate 같은 명령어가 존재하지 않는다. 그래서 apt-get 을 update 하여 패키지들을 업데이트를 진행하고 vim와 procps를 설치한다. 그러면 파일을 vi로 수정할 수 있고 netstate 로 네트워크 내역을 확인할 수 있다. 패키지를 설치하기 위해서는 root로 로그인해야 하므로 root로 bash를 실행하는 방법을 알아둬야 한다.

docker exec -u root -ti airflow_v1 /bin/bash
	apt-get update
	apt-get install -y vim
	apt-get install -y procps

 

 

- airflow 계정으로 bash 실행

패키지 설치 외 다른 설정 변경들은 대부분 airflow 계정으로 진행하므로 알고 있자.

docker exec -ti airflow_v1 /bin/bash

 

 

[ Postgre 설치 ]

Airflow를 설치된 상태에서 사용하면 싱글로만 사용이 가능하다. 멀티로 사용하기 위해서는 기본(SQL lite)를 벗어나 다른 DB를 사용하는데 가장 많이 사용하는 것이 Postgre이다. 그리고 더 전문적으로 Push Pull 기능으로 Airflow를 사용하기 위해서는 RMQ로 구성해야 하는데 이 글에서는 Postgre까지만 알아본다. Postgre도 로컬에 설치하지 않고 도커로 이미지를 받고 컨테이너를 생성하여 사용한다.

 

 

- Docker 이미지 다운 & 컨테이너 생성 & shell 접속

docker pull postgres

docker run -d -p 5432:5432 --name postgres \
-e LC_ALL=C.UTF-8 -e POSTGRES_PASSWORD=0000 postgres

docker exec -it postgres bash

 

 

- container DB, User 생성 및 권한 설정

psql -U postgres 
CREATE DATABASE airflow; 
CREATE USER dorumugs with ENCRYPTED password '0000'; 
GRANT all privileges on DATABASE airflow to dorumugs; 
\c airflow
GRANT all privileges on all tables in schema public to dorumugs; 
\q 

 

 

- postgresql cluster 생성

13 이라는 숫자는 Postgre의 버전이라고 보면 된다. 자신이 Postgre 몇 버전을 사용하는지 알아야 알맞는 숫자를 입력할 수 있다.

pg_createcluster 13 main 
pg_ctlcluster 13 main start

 

 

- postgre 설정 파일 수정 후 서비스 재시작

도커 컨테이너를 실행하면 처음에 vi가 없으므로 아래 명령어를 실행하여 vi를 설치하고 pg_hba.conf를 수정하면 간편하다.

cd /etc/postgresql/13/main
apt-get update
apt-get install vim -y
vim pg_hba.conf
# IPv4 local connections: 
host all all 0.0.0.0/0 md5

 

모든 설정이 완료되면 Postgre 를 재시작한다.

service postgresql restart

 

 

[ Airflow 설정 ]

Postgre까지 설치가 완료되었으면 Airflow 설정을 마무리 해야한다. vi로 airflow.cfg 파일을 열어서 기존에 있는 설정 파일을 수정한다. postgre는 executor가 LocalExecutor에서 실행되므로 유의해서 잘 수정해야 한다. 그리고 fernet_key도 없으면 실행할 때 오류를 만나게 되므로 꼭 넣도록 한다.

vi /usr/local/airflow/airflow.cfg
# dags_folder = /root/airflow/dags 
dags_folder = /shared/dags 

# base_log_folder = /root/airflow/logs 
base_log_folder = /shared/logs 

# plugins_folder = /root/airflow/plugins
plugins_folder = /shared/plugins

# default_timezone = utc 
default_timezone = Asia/Seoul 

# executor = SequentialExecutor 
executor = LocalExecutor 

# sql_alchemy_conn = sqlite:////root/airflow/airflow.db 
# [local_IP] 에는 로컬 컴퓨터 IP를 넣는다.
sql_alchemy_conn = postgresql+psycopg2://dorumugs:0000@[local_IP]/airflow

# fernet_key = "파이썬 명령어로 만든것"
fernet_key = 3aD2RKw_pwGaQ8cFxTl759jYTR1JfZtpLI_DleDGiZ4=

 

설정이 완료되면 airflow initdb 명령어를 실행하여 Postgre가 airflow를 실행할 수 있는 설정이 되도록 해야 정상 동작하게 된다.

airflow initdb

 

ps -ef로  airflow webserver와 airflow scheduler가 잘 실행되고 있는지 확인한다.

ps -ef
	/usr/local/bin/python /usr/local/bin/airflow webserver
	/usr/local/bin/python /usr/local/bin/airflow scheduler

 

 

이로서 Airflow 설치와 세팅이 전부 완료 되었다. 다음 글에서는 Airflow의 용어와 인터페이스를 알아보고 DAG(Directed Acyclic Graph)를 사용하여 Airflow의 핵심 기술들을 Python으로 만들어보겠다. XCOM, Branch, FileSensor, Hook을 python 으로 제작하고 테스트 하면서 어떻게 Airflow를 사용할 수 있는지 알아보자.

 

AirFlow Manual on Docker (2)

dorumugs.tistory.com/127