이 애플리케이션은 앞서 본 애플리케이션에 비해 비교적 유용하다. 실행하기 전에 빌드에 사용된 이미지와 최종적으로 빌드된 이미지의 크기를 잠시 비교해 보자.
실습 빌드에 사용된 Go 빌드 도구 이미지와 빌드된 Go 애플리케이션 이미지의 크기를 비교해 보자.
docker image ls -f reference=diamol/golang -f reference=image-gallery
대부분의 도커 명령어는 출력 내용을 필터링하는 기능을 제공한다. docker image ls 명령어에도 인자로 지정된 diamol/golang 혹은 image-gallery를 태그에 포함하는 이미지만을 출력하도록 필터링하는 기능이 있다. 이 명령을 실행해 보면 기반 이미지를 잘 선택하는 것이 얼마나 중요한지 깨닫게 될 것이다.
REPOSITORY TAG IMAGE ID CREATED SIZE image-gallery latest b6aaf615a3a8 20 minutes ago 25.5MB diamol/golang latest e0b7365f308e 2 hours ago 803MB
리눅스 환경을 기준으로, Go 빌드 도구를 포함하는 이미지의 크기는 800MB를 넘어선다. 그러나 실제 Go 애플리케이션 이미지의 크기는 25MB에 불과하다. 다시 강조하지만, 이 크기는 논리적 크기이므로 이미지 간에 많은 수의 레이어가 공유된다. 중요한 부분은 실제 이미지 크기가 아니라, 최종 애플리케이션 이미지에 모든 것이 들어가지 않는다는 점이다. Go 애플리케이션은 실행 시에 별도의 Go 빌드 도구가 필요 없다. 그러므로 애플리케이션 이미지의 크기를 최소한으로 유지하며 거의 750MB에 달하는 용량을 줄일 수 있는 것이다. 이는 공격이 가능한 부분 자체를 줄일 수 있다는 점에서 큰 장점이다.