FROM apache/airflow:2.5.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/*
Dockerfile 내에서 패키지를 설치하고 이미지를 최적화
1. `apt-get update`: 패키지 목록을 업데이트합니다.
2. `apt-get install -y --no-install-recommends vim`: vim 패키지를 설치하고 권장 패키지를 설치하지 않도록 합니다.
3. `apt-get autoremove -yqq --purge`: 불필요한 패키지를 자동으로 제거합니다.
4. `apt-get clean`: apt의 캐시를 지웁니다.
5. `rm -rf /var/lib/apt/lists/*`: 패키지 목록과 관련된 임시 파일을 제거합니다.

USER airflow

# app으로 requirements.txt 복사
COPY requirements.txt /app/requirements.txt
RUN pip3 install -r /app/requirements.txt


그냥하면 되는걸 왜 복사하고 설치할까?

Docker는 각 명령어를 캐싱하여 이미지 빌드 속도를 높이려고 합니다. 만약 COPY requirements.txt /app/requirements.txt 를 먼저 수행하고, 그 후에 소스 코드의 변경이 없는 경우 Docker는 이전 단계를 캐시하고 pip3 install을 다시 실행하지 않습니다. 이로써 이미지 빌드가 더 빨라집니다.

만약 소스 코드가 변경되지 않았고, requirements.txt 파일도 변경되지 않았다면, Docker는 이전에 설치된 패키지를 그대로 사용할 수 있습니다. 따라서 COPY ~ 를 따로 두는 것은 이미지 빌드 성능을 최적화하는 한 방법입니다.


# DAG 파일 복사
COPY dags/ /opt/airflow/dags/

 

+ Recent posts