이 과정에는 유지 보수를 위한 큰 오버헤드가 발생한다. 신규로 팀에 참여한 개발자는 이 도구를 설치하는 데만 출근 첫날을 모두 보내기 일쑤다. 또 작업용 컴퓨터에서 이들 도구 중 하나를 업데이트하면서 빌드 서버와 버전이 달라지는 것만으로도 빌드가 실패할 수 있다. 매니지드 빌드 서비스(managed build service)를 사용하더라도 이러한 문제를 피하기 어려우며 이로 인해 사용 가능한 도구의 선택 폭이 좁다.
이런 경우에 빌드 툴체인을 한 번에 패키징해서 공유할 수 있다면 편리할 것이다. 물론 도커를 사용하면 가능하다. 개발에 필요한 모든 도구를 배포하는 Dockerfile 스크립트를 작성한 다음 이를 이미지로 만든다. 그리고 애플리케이션 패키징을 위한 Dockerfile 스크립트에서 이 이미지를 사용해 소스 코드를 컴파일함으로써 애플리케이션을 패키징하는 것이다.
이 과정에는 아직 배우지 않은 새로운 기능이 쓰이므로 먼저 간단한 예제부터 시작해 보자. 예제 4-1은 이러한 워크플로를 적용한 기본적인 Dockerfile 스크립트다.
예제 4-1 멀티 스테이지 빌드를 적용한 Dockerfile 스크립트
FROM diamol/base AS build-stage
RUN echo 'Building...' > /build.txt
FROM diamol/base AS test-stage
COPY --from=build-stage /build.txt /build.txt
RUN echo 'Testing...' >> /build.txt
FROM diamol/base
COPY --from=test-stage /build.txt /build.txt
CMD cat /build.txt