본문 바로가기

프로그래밍/devops

Docker image alpine vs slim vs slim-stretch 우리는 어떤 이미지를 선택해야하나?

각 Docker image마다 저마다의 규칙으로 태그를 설정한채 배포하고 있지만 docker-library 공식 문서를 보면 몇몇 이미지에서(전부 확인해보지는 않았다) 동일한 tag 규칙을 따르며 배포하는 것을 확인할 수 있는데, 그 태그의 종류는 아래와 같다.

  • name:version
  • name:version-slim
  • name:version-alpine
  • name:version-windowsservercore

사실 필자는 이러한 이미지 태그들의 차이는 확인하지 않고 상용 배포 시 alpine으로 배포하는 것이 용량이 작길래 별 생각 없이 alpine을 많이 써왔는데, 오늘은 문서에 작성되어있는 내용들을 토대로 각 태그들의 차이점을 기록해보려한다. (이미지 설명은 python이미지를 기반으로 설명하겠다.)

 

name:version

가장 기본이 되는 이미지로 보통 사람들이 뭘 사용해야하는지 잘 모를 때 해당 이미지를 사용한다. 해당 이미지는 배포 뿐 아니라 base 이미지로 사용되기 위해 설계되었다.

 

간혹 뒤에 buster 나 stretch 가 붙는 경우가 있는데 이런 이미지는 Debian 계열 이미지를 베이스로 배포되었으며, 이미지가 어떤 릴리즈를 기반으로 배포되었는지를 알 수 있는 척도가 된다. 이미지 안에 몇가지 패키지를 추가로 설치하고 싶을 때 배포 시 발생하는 에러를 최소화하기 위해서는 위 태그들중 하나를 명시해 놓는 것이 좋다.

 

name:version-slim

이 이미지는 파이썬을 실행하는데 필요한 최소한의 패지키만 설치되어있다. 순수하게 파이썬만 실행할 수 있는 이미지를 말한다. 그렇기 때문에 배포 환경에 용량제한이 심하거나 순수하게 파이썬만 실행하는 환경이 아니라면 사용하지 않는 것이 좋다.

 

name:version-alpine

해당 이미지는 alpine linux를 기반으로 제작된 이미지인데 이 alpine 은 os 자체 용량이 매우 작기로 유명하다. 그래서 alpine 은 minimalize의 끝판왕으로 평가받는다. 한가지 주의해야할 점은 alpine은 glibc 가 아니라 musl libc 를 사용하기 때문에 가끔 C라이브러리 의존성에 이슈가 있을 수 있다는 단점이 있다.

 

alpine 이미지를 베이스로 사용하는 것을 확인할 수 있다.

 

name:version-windowsservercore

태그 이름에서 알 수 있듯 windows server 이미지를 기반으로 배포되었다.