# 학습 목표
- Docker 개념 이해하기 및 설치 하기
- Docker 를 이용한 AirFlow 설치하기
## Docker 설치
### Docker란?
리눅스내 가상화 관련 커널을 활용하여 어플리케이션을 독립적 환경에서 실행시키는 기술
가상화 서버(VM) 대비 Guest OS가 없어 경량화된 가상화 서버로 볼 수 있다.
VM의 단점으로 오버헤드가 있다. CPU나 메모리, 디스크 같은 공간을 가상화 서버에 명시적으로 할당 해줘야 되기 때문에 그만큼 호스트 OS가 사용할 수 있는 가연 공간이 줄어든다.
그런 단점을 해결한 게 Docker라고 보면 된다. 그래서 Docker를 보면 가상화 서버 (VM)에 있는 Guest OS가 없다.
APP만 독립적인 환경에서 구동시켜 줄 수 있는 것이 Docker이다.
Docker에서 APP하나 하나를 컨테이너라고 부른다.
그래서 컨테이너는 경량화된 가상화 서버라고 부를 수 있다.
### Docker 설치하기
ubuntu docker install 검색하기
아마 오류가 발생할 것이다.
그 이유는 도커 데몬이 시작이 안되어 있기 때문이다.
> sudo service docker start
이제 도커 설치가 완료되었으니 Airflow를 설치해 보자
## Airflow 설치
- Airflow 설치 방법은 여러가지 존재하지만 우리는 도커를 통해 설치한다.
- docker compose를 이용하면 한번에 쉽게 설치가 가능하기 때문이다.
- docker compose란?
여러개의 도커 컨테이너 설정을 한번에 관리하기 위한 도커 확장 기술
airflow를 설치하기 위한 도커 컨테이너 세팅 내용이 들어 있음
### Airflow 설치하기
구글에 airflow docker install 검색
Airflow 공식 홈페이지에 들어간다.
https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html
컨테이너에 대한 설정 내용인 yaml파일을 받는다.
다음으로 Airflow를 처음 시작하기 전에 환경을 준비해야 한다.
즉, 필요한 파일, 디렉터리를 만들고 데이터베이스를 초기화한다.
docker-compose에 대해 다음과 같이 구성해야 한다.
다음으로 조금 더 내려서 airflow 설치를 한다. sudo를 붙여준다.
sudo docker compose up airflow-init
다음으로 docker에 airflow를 올리는 명령어가 있다.
sudo docker compose up
위와 같이 터미널에 프롬프트가 끝나지 않는다.
이것은 에어플로우가 기본적으로 헬스 체크를 계속하기 때문에 프롬프트는 계속 살아있으면 정상이다.
그래서 해당 터미널을 닫으면 안된다.
다른 터미널을 하나 열어서 아래와 같은 명령어를 통해 컨테이너들을 확인할 수 있다.
sudo docker ps
나는 이렇게 창을 하나 더 띄워서 확인하였다.
자 그럼 이렇게 만든 airflow 서비스에 접속해 본다.
> localhost:8080
기본적으로 username과 password는 모두 airflow 이다.
근데 Airflow는 WSL안에 컨테이너에 올라와 있는데 어떻게 로컬 웹브라우저에 localhost:8080을 쳐서 들어올 수 있는 것일까?
그 이유는 WSL은 기본적으로 로컬 컴퓨터의 로컬 호스트라는 IP와 연결이 되어 있다. 그래서 로컬 컴퓨터의 웹브라우저에서 접속하는 것은 WSL에서 8080포트를 치는 것과 같은 효과를 갖고 있다.
자 그럼 이제 DAG를 살펴보자.
보이는 것들은 샘플용 DAG들이다.
example_bash_operator를 한번 살펴보자.
Details, graph Gantt 등 여러 탭들이 보이는데
Details라는 탭은 수행이력들을 보여준다.
DAG가 수행될 때마다 수행 이력들이 차곡차곡 쌓여서 보여준다.
가장 상단 왼쪽에 DAG 옆에 언파우지 되어있는것을 눌러주면 DAG가 자동으로 리프레쉬된다.
다음 두번째 탭인 Graph를 살펴본다.
Graph는 DAG를 구성하고 있는 TASK들을 보여준다.
TASK들의 연결 관계와 TASK들의 상태를 보여주고 있다.
다음으로 가장 많이 보는 탭이 Code이다.
그러면 이 DAG를 구성하고 있는 Python 코드를 볼 수 있다.