IT Share you

특정 RUN 명령에 대해 캐시 비활성화

shareyou 2020. 11. 18. 21:45
반응형

특정 RUN 명령에 대해 캐시 비활성화


Docker 이미지를 빌드 할 때마다 RUN실행하려는 Dockerfile에 몇 가지 명령이 -no-cache있습니다.

docker build --no-cache전체 Dockerfile에 대해 캐싱을 비활성화 한다는 것을 이해합니다 .

특정 RUN 명령에 대해 캐시를 비활성화 할 수 있습니까?


캐시를 비활성화하려는 영역 앞에 무의미하고 저렴한 명령을 삽입하는 옵션이 항상 있습니다.

이슈 주석 에서 제안한대로 빌드 인수 블록을 추가 할 수 있습니다 (이름은 임의적 일 수 있음).

ARG CACHEBUST=1 

같은 지역 전에 추가하여 각 실행 값을 수정 --build-arg CACHEBUST=$(date +%s)A와 docker build(여기에 현재 날짜이며, 값도 임의의 수 있습니다 실행에서 그것의 고유성을 보장하기 위해) 인수.

물론 이것은 중간 이미지의 해시 합계가 다르기 때문에 이후의 모든 블록에 대해서도 캐시를 비활성화합니다. 이는도 커가 현재 작동하는 방식을 고려하여 진정으로 선택적 캐시를 비활성화하여 사소하지 않은 문제를 비활성화합니다.


직접적으로는 아니지만 Dockerfile을 여러 부분으로 나누고 이미지를 빌드 한 다음 다음 Dockerfile의 시작 부분에있는이 이미지에서 캐싱을 사용하거나 사용하지 않고 이미지를 빌드 할 수 있습니다.


2016 년 2 월부터는 불가능합니다.

이 기능은 GitHub 에서 요청되었습니다.


또 다른 빠른 해킹은 명령 전에 임의의 바이트를 작성하는 것입니다.

RUN head -c 5 /dev/random > random_bytes && <run your command>

캐시 미스를 강제하는 5 개의 임의 바이트를 작성합니다.


빨리 대답

명령 앞에 다음을 넣으십시오. ARG CACHEBUST = 1 .

ARG CACHEBUST=1
RUN echo "Hi"

다음과 같이 빌드를 실행합니다.

docker build -t your-image --build-arg CACHEBUST=$(date +%s) .

설명

https://stackoverflow.com/a/49772666/3957754 (Vladislav 답변)

출처

http://dev.im-bot.com/docker-select-caching/

참고 URL : https://stackoverflow.com/questions/35134713/disable-cache-for-specific-run-commands

반응형