코딩관계론

[Docker] --no-cache가 시간을 잡아 먹는다 본문

개발/SPOT

[Docker] --no-cache가 시간을 잡아 먹는다

개발자_티모 2022. 10. 23. 23:50
반응형

1. 문제 상황

프로젝트가 example 도커 이미지를 빌드하기 위해선 기반 파일인 src 파일을 빌드해야 한다. example 코드를 수정하던 중에 

src 코드 수정이 필요하다면 src 파일을 --no-cache로 빌드했다.  src의 환경이 변하는 것이 아니라 코드만 변했을 뿐인데 기존 pkg를 다운하고 다시 설치하는 것은 불필요한 시간을 잡아먹고 있었다. 

FROM nvcr.io/nvidia/l4t-base:r32.6.1

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
    apt-get install -y \
        bluetooth \
        libbluetooth-dev \
        libsm6 \
        libglib2.0-0 \
        libxrender1 \
        libxext6 \
        python3-pip \
        python3-dev \
        build-essential \
        lm-sensors \
        iputils-ping

# install required python packages

COPY to_install/ .
RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install pip==21.3.1 setuptools==57.5.0 wheel==0.37.1
RUN python3 -m pip install -r docker-requirements.txt --find-links .

WORKDIR /app

#이 부분만 --no-cache로 빌드하면 된다
COPY ./surveillance-sdk/src /app/surveillance-sdk/src
COPY ./surveillance-sdk/setup.cfg /app/surveillance-sdk/setup.cfg
COPY ./surveillance-sdk/setup.py /app/surveillance-sdk/setup.py

RUN cd surveillance-sdk && python3 setup.py install

ENV OPENBLAS_CORETYPE=ARMV8
ENV LANG en_US.UTF-8

2. 도커 캐싱 여부 판단 방법

 

도커에서는 ADD와 COPY에 대한 명령문들을 그대로 캐싱한다고 한다. 해당 명령어의 캐싱 여부는 checksum을 이용해 검사하는데 파일의 수정 일자, 마지막 접근 일자 등은 checksum에 영향을 주지 못한다.

3.해결방법

해결방법은 ARG CACHEBUST=1을 도커 파일에 추가하면 된다. 해당 명령어 밑으로는 --no-cache로 빌드가 진행됨

 

해당 명령어를 추가하기 전엔  아래의 사진처럼 cache를 사용해 빌드를 진행했다. 

하지만 해당 명령어를 사용하면 아래처럼 cache를 사용하지 않고 다시 빌드하는 모습을 볼 수 있다. 

반응형