Docker 이미지 빌드시 선택적으로 Layer Caching 사용하기

2018. 7. 23. 15:41개발을 파헤치다/서버 인프라

반응형

DockerFile에서 이미지를 빌드하다 보면 수 많은 RUN 명령어를 사용하게 됩니다.

RUN 명령어는 이미지 레이어를 만들게 되는데 이 이미지 레이어는 우리가 흔히 게임할 때 저장을 하는 세이브 포인트 역할을 합니다.

따라서 다음번에 Docker 이미지를 빌드할 때 해당 이미지를 Caching하여 사용합니다. 이는 빌드 시간을 단축시킵니다.

하지만 때때로 Cache를 사용하지 않고 명령을 수행해야 할 경우가 있습니다.

예를 들어, 원격 저장소에서 소스 코드를 받아와서 사용하는 경우 Caching된 이미지 레이어를 사용하는 경우 변경된 소스가 반영되지 않습니다.

이를 해결하기 위해 다음의 솔루션을 사용합니다.

#DokerFile
FROM centos/python-36-centos7
MAINTAINER aaa@aaa.aaa
....

RUN yum -y intall gcc-c++

# CACHEBUST 인자값을 준 이후에 실행하는 RUN 명령어는 Cache된 레이어를 사용하지 않게 됩니다.
ARG CACHEBUST=1
RUN git clone https://exmaple@bitbucket.org/example/example.git

그리고 아래의 명령어를 사용하여 Docker 이미지를 빌드합니다.

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

위의 명령어에서 CACHEBUST를 현재 시간으로 주면 고유한 값이 들어가게 됩니다.

ARG 명령어를 사용하면 이후의 RUN 명령어에 Caching된 이미지 레이어를 사용하지 않습니다.
그 이유는 빌드시 인자값이 어떻게 오느냐에 따라 빌드가 달라질 것이기 때문입니다.

ARG CACHEBUST=1

1을 기본값으로 줄 수 있는데 기본값이 들어간 경우에는 Caching된 이미지를 사용합니다.

따라서 일부 RUN 명령어만 선택적으로 Caching을 사용하지 않는 이미지 빌드가 가능한 것입니다.

만약 Caching된 이미지 레이어를 사용해 이미지를 빌드하고 싶은 경우 아래의 명령어를 사용합니다.

docker build -t your-image .


반응형