[도커 강의] (5). 도커 컴포즈 사용법
1. 도커 왜쓸까?
개발 환경 구성이라는 어려움
새 프로젝트를 시작하거나 기존 프로젝트에 참여한 후 가장 먼저 하는 일은 바로, 개발 환경 구성일 겁니다. 파이썬Python을 사용하는 프로젝트라면 보통 pip 명령과 requirements.txt 파일을 사용해 의존 패키지를 설치합니다.
거의 언제나 하나 이상의 프로젝트를 진행해야 하니까, 의존성이 섞이지 않게 virtualenv도 사용합니다.
$ sudo apt-get install python3-venv
$ python3 -m venv venv
$ source venv/bin/activate
[ requirements.txt ]
Django==3.1.3
djangorestframework==3.12.2
mysqlclient==2.0.1
django-mysql==3.9
django-cors-headers==3.5.0
pika==1.2.1
$ pip install -r requirements.txt
이전 시간에 Docker-compose로 올렸던 의존성인데 왜 에러가 날까요?
Ubuntu 20.04에서는 바로 mysqlclient 설치가 안되기 때문입니다.
$ sudo apt update
$ sudo apt-get install mysql-server
# Debian, Ubuntu 계열
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
# 3번째 에러
pip install wheel
후에 다시 pip install을 실행해 봅시다.이렇게 서버와 미들웨어의 의존성을 맞추는것은 쉬운 일이 아닙니다.
이렇게 프로젝트별로 의존성을 관리하더라도 문제가 없는 것은 아닙니다. 의존성 패키지를 설치하는 과정이 무사히 성공하면 좋겠지만 실제로는 다음 상황을 거의 항상 겪기 마련입니다.
- 패키지 설치가 막힌다(SSL, LDAP 관련).
- (실수가 있건 없건) 로컬 컴퓨터에 이미 존재하는 환경과 꼬였다.
- 막상 배포를 했더니 개발 환경과 서버 환경이 같지 않아서 문제가 발생했다.
데이터베이스와 관련해서는 이런 오류도 만나고요.
...
ld: library not found for -lpq
collect2: ld returned 1 exit status
ld: library not found for -lpq
collect2: ld returned 1 exit status
error: command 'clang' failed with exit status 1
이미지 관련 패키지는 이런 오류를 선사합니다.
...
building '_imaging' extension
creating build/temp.macosx-10.8-intel-2.7
creating build/temp.macosx-10.8-intel-2.7/libImaging
...
unable to execute clang: No such file or directory
error: command 'clang' failed with exit status 1
어떤 패키지는 sudo 권한을 달라고도 하고요.
...
Skipping installation of /Library/Python/2.7/site-packages/
virtualenvwrapper/init.py (namespace package)
copying virtualenvwrapper/hook_loader.py -> /Library/Python/
2.7/site-packages/virtualenvwrapper
error: /Library/Python/2.7/site-packages/virtualenvwrapper:
Permission denied
해결책은 이런 것들입니다.
$ export XXXXXXX=-xxxxxx
$ sudo pip install xxx # 절대 따라하지 마세요
$ brew install xxx
물론 설치가 잘 끝났어도 이런 오류를 만날 수 있죠.
ImportError: No module named xxx
설치야 어차피 한 번만 하고 마는 것 아닌가?하고 생각하실 수도 있겠지만, 프로젝트에 새로운 사람이 합류하면 내가 겪었을 어려움 혹은 그 사람의 개발 환경에 따른 또다른 어려움들을 겪게 됩니다. 문서화를 잘 해두었다면 조금은 수월할 수도 있겠지만, 이미 개발 환경을 구성한 사람이라면 굳이 개발 환경 구성에 시간을 더 들일 필요가 없으니 가이드 문서는 금새 낡아버립니다. 게다가 설치 과정 외에도 신경 써야 할 요소(환경 변수, 데이터베이스 인코딩 등)가 항상 발목을 잡기 마련입니다.
개발 환경 구성에 대한 문서를 계속 업데이트한다면 이런 문제가 최소화되겠지만, 상상하는 것만으로도 진이 빠지는 일인 건 분명합니다.