왜 굳이 container를 사용할까?
- 일관성 있는 환경:
컨테이너는 애플리케이션과 그 의존성을 함께 패키징하므로, 개발 환경, 테스트 환경, 프로덕션 환경 등 어디에서든 동일한 환경에서 애플리케이션을 실행할 수 있습니다.- 의존성 충돌 감소:
여러 프로젝트나 애플리케이션들이 서로 다른 버전의 의존성을 요구하는 경우, 컨테이너를 사용하면 각각의 독립된 환경 내에서 의존성을 관리할 수 있어 충돌을 피할 수 있습니다.- 배포의 용이성:
컨테이너화된 애플리케이션은 이미지 형태로 저장 및 공유가 가능하므로, 배포 및 롤백이 간편합니다.- 확장성:
필요에 따라 동일한 애플리케이션의 여러 인스턴스를 쉽게 실행하여 규모를 확장할 수 있습니다.- 보안:
각 컨테이너는 독립된 실행 환경을 가지므로, 하나의 애플리케이션의 보안 문제가 다른 애플리케이션에 영향을 미치는 것을 줄일 수 있습니다.- 통합 및 자동화:
컨테이너화를 통해 CI/CD 파이프라인에 쉽게 통합되어 자동화된 테스트 및 배포가 가능합니다.- 리소스 효율:
VM(가상 머신)보다 컨테이너는 더 적은 오버헤드로 실행됩니다. 따라서 더 많은 애플리케이션을 더 적은 리소스로 실행할 수 있습니다.
Django로 백엔드를 구성하고 해당 애플리케이션을 Docker 컨테이너로 만드는 기본적인 방법.
먼저 윈도우에서 docker-desktop를 설치를 완료한다.
pip install django
django-admin startproject myproject
cd myproject
python manage.py startapp myapp
django==3.2.8
# 기타 필요한 라이브러리
# 기반 이미지
FROM python:3.8-slim
# 환경변수 설정
ENV PYTHONUNBUFFERED 1
# 작업 디렉토리 생성 및 설정
WORKDIR /app
# 의존성 파일을 컨테이너에 복사 및 설치
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
# 프로젝트 파일들을 컨테이너에 복사
COPY . /app/
version: '3'
services:
web:
build: .
command: ["python", "manage.py", "runserver", "0.0.0.0:8000"]
volumes:
- .:/app
ports:
- "8000:8000"
docker-compose build
docker-compose up
docker-compose run web python manage.py migrate
웹 브라우저에서 http://localhost:8000/로 접속하면 Django 애플리케이션을 확인할 수 있음.