이 스크립트는 빌드가 여러 단계로 나뉘는 멀티 스테이지 빌드를 적용한 것이다. 각 빌드 단계는 FROM 인스트럭션으로 시작된다. 필요한 경우 빌드 단계에 AS 파라미터를 이용해 이름을 붙일 수도 있다. 예제 4-1은 세 단계로 나뉜 멀티 스테이지 빌드의 예다. 두 단계는 build-stage, test-stage로 이름이 붙어 있고, 마지막 한 단계는 이름이 없다. 빌드가 여러 단계로 나뉘어 있다고는 하지만, 최종 산출물은 마지막 단계의 내용물을 담은 도커 이미지다.
각 빌드 단계는 독립적으로 실행되지만, 앞선 단계에서 만들어진 디렉터리나 파일을 복사할 수는 있다. 예제 4-1의 COPY 인스트럭션을 보면 --from 인자를 사용해 해당 파일이 호스트 컴퓨터의 파일 시스템이 아니라 앞선 빌드 단계의 파일 시스템에 있는 파일임을 알려 준다. 이 예제에서는 build-stage 단계에서 파일 하나를 생성하는데, 이 파일을 test-stage로 복사하고 다시 test-stage에서 생성한 파일을 마지막 단계로 복사한다.
처음 보는 인스트럭션이 나왔다. RUN 인스트럭션이다. 여기서는 파일을 생성하기 위해 사용했다.
RUN 인스트럭션은 빌드 중에 컨테이너 안에서 명령을 실행한 다음 그 결과를 이미지 레이어에 저장하는 기능을 한다. RUN 인스트럭션에서 실행할 수 있는 명령에는 특별한 제한이 없지만, FROM 인스트럭션에서 지정한 이미지에서 실행할 수 있는 것이어야 한다. 여기서는 diamol/base를 기반 이미지로 지정했으며, 이 이미지가 echo 명령을 포함하고 있기 때문에 이 RUN 인스트럭션이 정상적으로 동작한다.