개발/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를 사용하지 않고 다시 빌드하는 모습을 볼 수 있다.
반응형