카테고리 없음

python-alpine을 사용을 지양해야 하는 이유

eden.do 2023. 1. 5. 14:51

Docker 이미지의 기본 이미지를 선택할 때 Alpine linux를 권장하는데 go 언어를 사용하는 경우에는 이미지도 작아지고 빌드 속도도 빨라집니다. 하지만 python을 사용하는 경우에는 빌드 속도도 더 느리고 이미지도 더 크게 만들고 런타임 버그도 발생할 가능성이 있습니다. 

그 이유에 대해 알아보도록 하겠습니다. 

 

Alpine을 Docker 이미지로 추천하는 이유 

Alpine 리눅스는 일단 다른 OS 이미지보다 훨씬 이미지 크기가 작습니다. 

gcc를 설치한다고 하면, ubuntu 이미지에 설치하는 것 보다 alpine 이미지에 설치할 때 빌드 속도도 빠르고 훨씬 크기가 작은 이미지가 생성됩니다. 

Ubuntu 이미지에 gcc 설치한 경우
Alpine 이미지에 gcc 설치한 경우

Python을 alpine이미지로 만드는 경우

glibc(GNU C Library) : GNU 프로젝트가 구현한 C 표준 라이브러리

musl : 리눅스 커널 기반의 운영체제용으로 고안된 C 표준 라이브러리 (경량화 libc)

 

보통은 리눅스에서 glibc를 쓰는데 alpine은 musl을 사용합니다. binary wheel은 glibc로 컴파일되므로 alpine linux는 휠 지원을 하지 않습니다. 요즘 대부분의 python 패키지에는 PyPI의 binary wheel이 포함되어 있어서 설치 시간이 크게 단축됩니다. 하지만 alpine linux를 사용하면 이 binary wheel을 사용하지 못하므로 모든 python 패키지의 C코드를 컴파일 해야됩니다. 

 

또한, Alpine linux는 예기치 않은 런타임 버그를 유발할 수 있습니다. 

musl과 glibc는 대부분 호환이 되지만 실제로는 약간의 문제가 발생할 수 있습니다. 예를 들면.. alpine은 기본 스택 크기가 작기 때문에 python 충돌이 발생할 수 있습니다. 또한, 메모리 할당 방식 때문에 python이 훨씬 느리거나... 등의 여러 문제들이 발생할 수 있습니다. 

 

그래서.. 결론으로는 빌드 시간이 오래걸리고 이미지가 커지고 버그 위험성 때문에 alpine linux를 python을 위해 사용하지 않는 것이 좋습니다. 

 

 

[출처] https://pythonspeed.com/articles/alpine-docker-python/

 

Using Alpine can make Python Docker builds 50× slower

Alpine Linux is often recommended as a smaller, faster Docker base image. But if you’re using Python, it will slow down your build and make your image larger.

pythonspeed.com