[플레이데이터] 5월 25일 수업

싱숭생숭어·2023년 5월 25일
0

플레이데이터 수업

목록 보기
11/21

Dockerfile 생성

  • dockerfile안에 들어갈 내용(vim Dockerfile 만들고 안에 입력)
FROM apache/airflow:2.6.1
USER root
RUN apt-get update \
  && apt-get install -y --no-install-recommends \
     	vim \
  && apt-get autoremove -yqq --purge \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*
USER "${AIRFLOW_UID:-50000}:0"
  • 이 Dockerfile은 Apache Airflow 2.6.1 버전을 기반으로(이미지를 가져옴), root 사용자로 패키지를 설치한 후, Vim을 추가로 설치함
  • 그런 다음 더 이상 필요하지 않은 패키지를 자동으로 제거하고, apt 캐시 및 패키지 목록과 관련된 파일을 삭제함
  • 마지막 줄은 사용자를 변경하여 컨테이너에서 실행되는 프로세스에 대해 적절한 사용자 및 그룹 권한을 설정한다는 것 !
    • ${AIRFLOW_UID:-50000}는 환경 변수 AIRFLOW_UID를 참조하여 해당 값을 사용하지만, 환경 변수 AIRFLOW_UID가 설정되어 있지 않은 경우에는 기본값으로 50000을 사용함
    • :0은 사용자 그룹을 지정하는 것으로, 0은 root 그룹을 나타냄. 따라서 사용자가 50000이며 root 그룹에 속하게 된다는 의미 !
  • 맨 아랫줄 0은 root 를 의미함

  • 도커 이미지 목록 보기
    docker images

  • 도커 이미지 삭제
    docker rmi [이미지 이름]

  • airflow_encore 이름으로 docker build
    docker build -t airflow_encore .

권한 변경

  • 본인 계정 권한의 아이디 찾기
    id

나의 경우엔 uid = 1000(wsl에서 실행)

docker에서 폴더를 만들면 root 권한으로 만들어짐. username이 아니라

  • data 폴더의 소유주 변경(root -> user)
    sudo chown 50000:1000 ./data

  • 내가 쓸수있게 권한 변경 (7-소유자 7-그룹 5-제3자)
    sudo chmod 775 ./data

그럼 이렇게 권한이 바뀐 걸 볼 수 있음 !

docker 실행

  • docker 컨테이너 내부에서 bash 셸 실행
    docker exec -it airflow /bin/bash
  • docker exec: Docker 컨테이너 내에서 명령어를 실행하는 명령어입니다.
  • -it: 표준 입력(stdin)을 터미널로 연결하고, 상호 작용(interactive) 모드로 실행합니다.
  • airflow: 접속할 Docker 컨테이너의 이름입니다. 이 경우에는 "airflow"라는 이름의 컨테이너에 접속하게 됩니다.
  • /bin/bash: 접속할 컨테이너 내에서 실행할 명령어입니다. 이 경우에는 Bash 셸을 실행하도록 지정하였습니다.
  • docker 실행
    docker run -d -p 8080:8080 -v ~/encore0525/dags/:/opt/airflow/dags/ -v ~/encore0525/data/:/home/airflow/data --entrypoint=/bin/bash --name airflow airflow_encore -c '(airflow db init && airflow users create --username admin --password admin --firstname Anonymous --lastname Admin --role Admin --email test@test.com); airflow webserver & airflow scheduler
  • docker run: Docker 컨테이너를 실행하는 명령어입니다.
  • -d: 컨테이너를 백그라운드에서 실행하고 터미널과 연결하지 않는 "detached" 모드로 실행합니다.
  • -p 8080:8080: 컨테이너의 8080 포트를 호스트의 8080 포트에 매핑합니다. 이렇게 하면 컨테이너 내부에서 실행되는 서비스에 로컬 머신에서 localhost:8080으로 접근할 수 있습니다.
  • -v ~/encore0525/dags/:/opt/airflow/dags/: 호스트 머신의 encore0525/dags/ 디렉토리를 컨테이너 내부의 /opt/airflow/dags/ 디렉토리에 마운트합니다. 이렇게 하면 해당 디렉토리에 위치한 DAG(Directed Acyclic Graph) 파일들을 사용할 수 있습니다.
  • -v ~/encore0525/data/:/home/airflow/data: 호스트 머신의 encore0525/data/ 디렉토리를 컨테이너 내부의 /home/airflow/data 디렉토리에 마운트합니다. 이렇게 하면 컨테이너 내부에서 해당 디렉토리에 위치한 데이터 파일에 접근할 수 있습니다.
  • --entrypoint=/bin/bash: Docker 이미지의 기본 entrypoint를 무시하고 /bin/bash로 설정합니다. 따라서 컨테이너가 Bash 셸로 시작됩니다.
  • --name airflow: 실행 중인 컨테이너에 "airflow"라는 이름을 지정합니다.
  • airflow_encore: 사용할 Docker 이미지를 지정합니다.
  • -c '(airflow db init && airflow users create --username admin --password admin --firstname Anonymous --lastname Admin --role Admin --email test@test.com); airflow webserver & airflow scheduler': 이 명령어는 컨테이너 내부에서 실행될 것입니다. Airflow 데이터베이스를 초기화하고(airflow db init), 관리자 권한을 가진 사용자를 생성하고(airflow users create), 그 후 Airflow 웹 서버(airflow webserver)와 스케줄러(airflow scheduler)


그럼 이제 위 사진처럼 web에 접속가능

강사님이 주신 naver_stock.py 파일을 dags 폴더 안에 넣음

dags에서 실행

제대로 실행된 것 확인

제대로 파일이 생성되었는지 확인

물론 container안이 아니라 local에서도 파일을 확인 가능


DAG 파일 내용

profile
공부합시당

0개의 댓글