🐋 Python 프로젝트를 위한 Docker 베이스 이미지 선택 시 Alpine Linux를 피해야 하는 이유
Introduction
Django를 활용하여 블로그를 만들어보는 프로젝트를 진행하다가 docker로 환경을 옮기는 도중 여러 에러들을 만났다. 이 글은 문제를 해결하면서 얻은 지식을 공유하고자 작성한 글이다.
첫 번째 문제
Alpine Linux와 cryptography의 호환성 문제
Dockerfile
, docker-compose.yml
파일을 작성 후 마지막으로 빌드를 하던 중 아래의 에러를 만났다.
ERROR: No matching distribution found for cryptography==3.4.7
현재 Dockerfile에서 사용하는 image 버전과 requirements.txt에 적힌 cryptography 버전은 아래와 같다. 이렇게 설정해두고 docker-compose
로 빌드를 하려고 했는데 에러가 발생한 것이다.
FROM python:3.8-alpine
cryptography==3.4.7
해결
alpine linux와 python에서 암호화 알고리즘이 구현된 패키지인 cryptography의 호환성 문제라고 생각했고, cryptography의 공식 문서를 참고하여 해결책을 찾아보았다.
대략 요약하면 cryptography 패키지는 Rust를 빌드할 때 사용한다. 즉, Rust의 패키지 관리자이자 빌드 도구인 cargo를 같이 설치해야지 돌아간다는 것이다.
$ sudo apk add gcc musl-dev python3-dev libffi-dev openssl-dev cargo