# Python 이미지 사용
FROM python:3.10.11-slim-bullseye
# 도커 컨테이너 내부에서 실행할 기본 디렉토리 설정
WORKDIR /app
# pipenv를 설치, 불필요한 캐시 없도록 하여 이미지 크기 줄임
RUN pip install --no-cache-dir pipenv
# 전체 소스코드 옮기기 전 Pipfile과 Pipfile.lock 먼저 컨테이너로 복사
COPY Pipfile Pipfile.lock ./
# 의존성을 설치, --deploy로 Pipfile과 Pipfile.lock비교해서 불일치시 빌드 실패
RUN pipenv install --deploy
# 전체 소스코드 컨테이너로 복사
COPY . .
# 포트 8000 외부로 노출
EXPOSE 8000
# 컨테이너 실행 시 pipenv 환경 내에서 Django 서버를 실행
CMD ["pipenv", "run", "python", "manage.py", "runserver", "0.0.0.0:8000"]
docker run -it --rm \
-v $(pwd):/app \
-v $(pwd)/.env:/app/.env \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
-p 8000:8000 \
--name django_dev_container \
ASKu-AI-API pipenv run python manage.py runserver 0.0.0.0:8000
-it
: docker 컨테이너 내부의 cmd를 사용할 수 있도록 하는 옵션 이는 컨테이너 내부에서 직접 입력을 수행하고 결과를 보기 위해 사용됩니다. 예를 들어, 컨테이너 내부의 Django 개발 서버 로그를 실시간으로 확인하거나 디버깅할 때 유용
--rm
: 컨테이너가 종료되면 자동으로 해당 컨테이너를 삭제하는 옵션, 개발 과정에서 임시적으로 생성된 컨테이너를 자동으로 정리하여 시스템을 깔끔하게 유지
-v $(pwd):/app
: 현재 작업 디렉토리($(pwd)
)를 컨테이너의 /app
디렉토리에 마운트합니다. 로컬에서 개발 중인 코드가 컨테이너 내부에서 즉시 반영되도록 하여 개발환경에서 바로 테스트 가능
-v $(pwd)/.env:/app/.env
: 프로젝트 파일내의 .env파일을 컨테이너 내에서 환경변수로 참조할 수 있도록 하는 옵션. 루트 위치의 .env
파일을 컨테이너의 /app/.env
위치에 마운트
v /etc/timezone:/etc/timezone:ro
: 나의 로컬환경과 컨테이너 내부 환경의 시간대 동기화. 호스트 시스템의 시간대 설정 파일을 컨테이너에 읽기 전용으로 마운트
v /etc/localtime:/etc/localtime:ro
: 나의 로컬환경과 컨테이너 내부 환경의 시간대 동기화. 호스트 시스템의 로컬 시간 파일을 컨테이너에 읽기 전용으로 마운트, 이 옵션을 통해 호스트 시스템과 정확히 동일한 시간 정보를 컨테이너가 사용
p 8000:8000
: 호스트의 8000 포트와 컨테이너의 8000 포트를 연결 이는 외부에서 컨테이너 내 실행 중인 Django 개발 서버에 접근가능
--name ASKu-AI-API
: 컨테이너 이름 지정