Docker든 Docker Toolbox든 적절한거 설치하시고 그대로 따라하시면 됩니다~
cahna/airflow 기반으로 시작하기
Default 상태의 airflow 띄우기
- 여기까지하면 SequentialExecutor 모드에서 db는 SQLLite를 사용하는 airflow를 돌릴 수 있는 상태가 된다.
- 얼핏보면 이 상태로 간단한 서비스는 가능할것 같기는 한데.. SQLLite 문제때문인지 안되는 기능들이 여럿 있다.
- 이것만 가뿐하게 mysql로 바꾸면 되려나?...흠...이건 pass.
Tips
- 원래 docker는 host와 container의 volumn을 연결할때, host의 디렉토리를 container에 mount한다.
- 즉, container에 지정된 directory에 내용물이 있어도 host의 내용물로 덮어 써진다. 물론 mount 해제하면 복구되고.
- 그런데 airflow는 container에 있어야할 파일들이 host의 volumn 위치에 들어있네???
- 사실 이건 Docker가 volumn mount를 끝낸 후에 airflow를 띄우면 그때 airflow가 파일을 생성하는 것이기 때문에 그렇다.
- 즉, image 혹은 container에 있던 파일이 host의 디렉토리에 보여지는게 아니라, host의 내용을 container에 덮어쓴 후에 airflow가 생성하는거다.
puckel/docker-airflow 기반으로 All-in-One 띄우기.
실행 절차
Tips
volume이 mount가 안될 때
- 아래 inspect 명령어로 내용을 까본다.
- docker inspect airflow_webserver_1
- OS X에서 Docker compose로 실행하는 경우, OS X에서 실행해야 하는데 이때 volume을 아래와 같이 ~로 해주면 Docker VM의 ~가 아니라 OS X의 ~로 지정한다!
- ~/airflow/dags:/usr/local/airflow/dags
- 이때문에 Docker VM에 들어가서 아래 경로를 찾아가야 파일이 들어있다.
- 기대한곳: /home/docker/airflow/dags
- 마운트된곳: /Users/cmpark/airflow/dags
- docker toolbelt의 문제인듯.
container들간의 통신
- 의문이 들만한 점.
- 여러 컨테이너들은 실질적으로 서로 다른 장비에 떠서 ip 통신을 하는 상태인다.
- 그런데, ip는 컨테이너가 뜰 때 할당되는데, 상대방 컨테이너가 어떤 ip를 가지게 될지 어떻게 알고 연결해주는걸까??
- 구현방식
- 각 컨테이너 /etc/hosts에 들어가보면 다른 컨테이너들의 ip가 등록되어 있다!
- how?
- docker는 --link 옵션을 제공하며, 이걸 통해 하나의 컨테이너 안에서 다른 컨테이너의 ip를 어떤 이름으로 /etc/hosts에 등록할지 결정할 수 있다.
- 즉, 아래와 같이 mysql을 띄우고 webserver를 띄우면 webserver의 /etc/hosts에 mysql이 등록된다.
- docker run --name airflow-db -d mysql
- docker run --link airflow-db:mysql puckel/docker-airflow webserver
- 문제는... airflow-db 컨테이너를 재시작할때 ip가 바뀌어 버려도 webserver의 /etc/hosts는 안바뀌기 때문에 주의해야함... 둘 다 리붓하던가... ip 안바뀌길 기도하던가... 혹은 용빼는 재주가 있을지도?
'SW-PRODUCT > 개발-데이터분석' 카테고리의 다른 글
[링크] 대용량 스트리밍 데이터 분석 (0) | 2016.05.30 |
---|---|
[후기] Docker로 Airbnb Airflow 삽질 side-work (0) | 2016.04.21 |
Docker에서 Locale 설정 (0) | 2016.04.16 |
airflow 삽질일기 - 이제 띄웠다 (0) | 2016.04.15 |
airflow 삽질일기 - docker 삽질 (0) | 2016.04.15 |