-
도커 허브에서 아래 bitnami airflow를 가져다가 compose up하려고했다.
그런데 코드 구동 시 필요한 라이브러리들이 없었공.. 😣
사수님의 조언을 바탕으로 일일히 image 설치할 때마다 해당 라이브러리들을 설치할 순 없으니 bitnami image base로 requirements를 추가하여 라이브러리를 설치 후 해당 이미지를 사용하기로 했다.
결론적으로 도커 빌드는 임시 컨테이너 생성 > 명령어 수행 > 이미지로 저장 > 임시 컨테이너 삭제 > 새로 만든 이미지 기반 임시 컨테이너 생성 > 명령어 수행 > 이미지로 저장 > 임시 컨테이너 삭제 > … 의 과정을 계속해서 반복한다고 볼 수 있습니다. 명령어를 실행할 때마다 이미지 레이어를 저장하고 다시 빌드할 때 Dockerfile이 변경되지 않았다면 기존에 저장된 이미지를 그대로 캐시처럼 사용합니다. 출처: https://subicura.com/2017/02/10/docker-guide-for-beginners-create-image-and-deploy.html
Dockerfile
* 사전에 필요한 라이브러리는 requirements.txt에 저장해두어야한다 :)
(airflow) airflow@DESKTOP-LQRSEG1:~$ pip freeze >> requirements.txt
Dockerfile 이라는 파일안에 아래와 같이 작성하였다.
FROM docker.io/bitnami/airflow:2MAINTAINER weejw <upsidejiwon@gmail.com>USER rootRUN apt-get update -yRUN apt-get install -y python-pip python-dev build-essentialCOPY requirements.txt /opt/bitnami/airflow/requirements.txtWORKDIR /opt/bitnami/airflowRUN chmod 777 /opt/bitnami/airflow/requirements.txtRUN chown 1001 /opt/bitnami/airflow/requirements.txtRUN /bin/bash -c "source /opt/bitnami/airflow/venv/bin/activate && pip install -r /opt/bitnami/airflow/requirements.txt"USER 1001* /opt 아래가 root 권한이라서 USER 권한을 중간에 변경해주고 진행했다... :(
빌드
sudo docker build -t docker.io/local/airflow:2 .
그럼 아래와 같이 이미지가 생긴다. 이에 REPOSITORY:TAG로 compose yml 파일에 적어두면 끝!!!
REPOSITORY TAG IMAGE ID CREATED SIZElocal/airflow 2 63193bc26c8a 4 seconds ago 2.72GByaml파일에 이렇게 말이다!
airflow:image: local/airflow:2.. 근데 이번에는 DAG가 broken..되었다. 내 마음도 broken..
그러다가 이 글을 통해 해결할 수 있겠다 생각되었다.
bitnami에는
airflow, airflow-worker, airflow-scheduler 3종류가 있다.
이 셋 다 image를 다시 생성하고 빌드하고 이 이미지를 참조하게끔 했다!
이제 된다 ^^! 해-결!
으하하하하!!!! 햅삐!
에러해결
하아.. 도커 어렵다 어려웡
1)
아래와 같은 에러는 위에처럼 Dockerfile에 USER root와 USER 1001을 작성해주면 된다.
Reading package lists...E: List directory /var/lib/apt/lists/partial is missing. - Acquire (2: No such file or directory)The command '/bin/sh -c apt-get update -y' returned a non-zero code: 1002)
에러까진 아니고,, 아니다 라이브러리 설치에 6시간 걸리면 에러맞다 ㅡㅡ;;
아래와 같은 정보가 뜨면서 lib 설치가 엄첨 오래걸린다.
INFO: This is taking longer than usual.You might need to provide the dependency resolver with stricterconstraints to reduce runtime. If you want to abort this run,you can press Ctrl + C to do so. To improve how pip performs,tell us what happened here: https://pip.pypa.io/surveys/backtracking현 버전은 pip 21.3.1 으로 21.0 부터 생긴 문제라고한다 .;; 그래서 아래 2가지 해결 방법으로 해결하면 된다.
1. pip 버전을 21 이하로 fix: pip install -U pip==20.3
2.--use-deprecated=legacy-resolver 옵션 추가: pip install --use-deprecated=legacy-resolver -r requirements.txt
* 2번은 말그대로 최신 dependecy의 resolver 사용하지 않는다는 말임
3)
bag file size가 너무 커서 local directory를 bind 하려고했다.. volume형태는 container에서 생성된 파일을 container별로 관리할 때 사용하는 것이므로,, 취지에 맞지않음
아래처럼 docker-compse 파일 수정
* 추가: Dockerfile에도 마운트할 폴더를 명시하는 것이 좋다고 한다.
https://subicura.com/2017/02/10/docker-guide-for-beginners-create-image-and-deploy.html
version: '3.2'volumes:- type: bindsource: /home/airflow/bag_datatarget: /opt/bitnami/airflow/bag_datavolumes:bag_data:4)
airflow "Could not connect to the database"
__init__() got an unexpected keyword argument 'resolver'
이렇게 하고 빌드하고 run했더니 갑자기 database 연결이 안되었다. 그래서 그냥 airflow 재설치했다.
그랬더니 해결되었다.
이미지 빌드부터 다시해야한다.
db init errorpip install apaache-airflow성공pip install "apache-airflow[celery]==2.2.3"REFERENCES
https://www.daleseo.com/docker-volumes-bind-mounts/
https://freedeveloper.tistory.com/182
https://docs.docker.com/compose/compose-file/compose-file-v3/
https://uiandwe.tistory.com/1315
https://bluecolorsky.tistory.com/94
https://github.com/WASdev/ci.docker/issues/194#issuecomment-433519379
위지원데이터와 관련된 일을 모두 좋아합니다
'2022년 > Developement' 카테고리의 다른 글
[Daily Coding] 노션으로 코딩테스트 공부 정리하기 (6) 2022.02.10 github blog 만들기 + Jenkins + slack 연동 (2) 2022.01.14 docker 명령어 몇가지 (0) 2022.01.07 [Network] LDAP Ubuntu <-> Windows LDAP Manager (0) 2022.01.03 [Network] LDAP (0) 2021.12.31