4.4 애플리케이션 빌드 실전 예제: Go 소스 코드
멀티 스테이지 빌드를 적용한 Dockerfile의 마지막 예제로, Go를 사용해 구현한 웹 애플리케이션을 살펴보자. Go는 네이티브 바이너리로 컴파일되는 현대적인 크로스 플랫폼 언어다. 다시 말하면, 원하는 어떤 플랫폼(윈도, 리눅스, amd64 아키텍처, ARM 아키텍처)이든 해당 플랫폼에서 동작하는 바이너리를 컴파일할 수 있다는 의미다. 자바나 Node.js, 닷넷 코어 혹은 파이썬처럼 별도의 런타임이 필요하지도 않다. 그만큼 도커 이미지의 크기가 매우 작아진다.
러스트(Rust)와 스위프트(Swift) 등 네이티브 바이너리로 컴파일되는 언어는 Go 외에도 몇 가지가 더 있지만, 그중에서도 Go가 가장 지원 플랫폼의 범위가 넓다. 또한, Go는 클라우드 네이티브 언어로서도 인기가 높다. 애초에 도커 자체가 Go로 구현됐을 정도다. 도커를 이용한 Go 애플리케이션의 멀티 스테이지 빌드는 자바의 빌드 방식과 유사한 점이 많지만, 몇 가지 중요한 차이점이 있다. 예제 4-4는 Go 애플리케이션 빌드를 위한 전체 Dockerfile 스크립트다.