티스토리 뷰
728x90
반응형
Docker를 이용해 동일한 환경에서 Django 프로젝트를 실습하고자 하는 경우, Docker Compose를 사용하면 쉽게 개발, 테스트, 배포 환경을 구성할 수 있다.
PyCharm을 이용해 Django 프로젝트를 Docker Compose로 설정하는 방법을 단계별로 살펴보자.
1. Docker Desktop 설치
- Docker Desktop을 설치한다.
- Windows 설치 방법은 이전 글인 [Docker] 도커 데스크탑 설치 (Docker Desktop in Windows)를 참고할 수 있다.
2. 프로젝트 생성
- 먼저 도커에서 실행할 Django 프로젝트 디렉토리가 필요하다.
- 빈 디렉토리거나 기존에 작업 중인 프로젝트여도 상관없다.
- 여기서는 djangoProject라는 빈 디렉토리를 사용하려고 한다.
2. Docker Compose를 실행하기 위한 파일 생성
- requirements.txt
- Dockerfile
- docker-compose.yaml
1) requirements.txt
- requirements.txt 파일에 프로젝트에 필요한 패키지를 명시한다.
- Django 프로젝트를 구성할 때는 기본적으로 Django 패키지를 추가한다.
Django>=4.0,<5.0
2) Dockerfile
- Dockerfile은 Docker 컨테이너 이미지가 빌드(build)될 때 거치는 단계들을 정의한 파일이다.
- 이 파일을 통해 Django 프로젝트 환경을 설정할 수 있다.
# 1. python 3.11 버전을 사용한 기본 이미지
FROM python:3.11
# 2. 환경 변수 설정: Python 출력 버퍼링을 비활성화
ENV PYTHONUNBUFFERED 1
# 3. 작업 디렉토리 설정
WORKDIR /app
# 4. 의존성 파일을 복사하고 설치
COPY requirements.txt .
RUN pip install --upgrade pip && \
pip install -r requirements.txt
# 현재 디렉토리의 모든 프로젝트 파일을 이미지 내의 작업 디렉토리로 복사
COPY . .
# 8000번 포트 개방
EXPOSE 8000
- 모든 프로젝트 파일을 복사하기 전, 의존성 파일을 개별적으로 복사하고 설치하는 이유는 의존성이 변경되지 않는 한 이 단계까지의 캐시를 활용하여 더 빠르게 빌드할 수 있기 때문이다.
3) docker-compose.yaml
- docker-compose.yaml 파일을 통해 여러 서비스를 하나의 파일로 정의할 수 있다.
- 여기서는 Django 애플리케이션과 MySQL 데이터베이스를 구성한다.
services:
# Django 애플리케이션 서비스의 이름
app:
# 현재 디렉토리에 있는 Dockerfile을 기반으로 이미지 빌드 즉, 빌드할 Dockerfile이 있는 위치를 알려줌
build: .
# 컨테이너가 시작될 때 실행할 명령어를 설정
command: >
sh -c "python manage.py runserver 0.0.0.0:8000"
# 로컬 디렉토리를 컨테이너 내의 /app 디렉토리로 마운트
volumes:
- .:/app
# 호스트의 8000번 포트를 컨테이너의 8000번 포트와 연결
ports:
- "8000:8000"
# 아래에 정의된 db 서비스가 시작된 후 이 서비스를 시작
depends_on:
- db
# MySQL 서비스의 이름
db:
# MySQL 8.0 이미지를 사용해 컨테이너 생성
image: mysql:8.0
# 컨테이너가 종료되면 자동으로 재시작하도록 설정
restart: always
# 데이터베이스 환경 변수 설정
environment:
MYSQL_ROOT_PASSWORD: rootpw
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: mypw
# 포트 연결
ports:
- "3306:3306"
- Note: Django는 기본적으로 SQLite를 사용한다. 하지만 이 예시에는 MySQL을 사용해 데이터베이스를 설정했으며, 이처럼 별도의 데이터베이스가 필요한 경우 db 서비스 구성을 조정하여 다른 데이터베이스 시스템도 사용할 수 있다.
- 종료시 데이터 손실을 방지하려면 db 서비스에 volumes를 설정해주어야 한다.
services:
db:
...
volumes:
- db_data:/var/lib/mysql # MySQL 데이터가 저장될 볼륨 설정
volumes:
db_data: # MySQL 데이터를 저장할 외부 볼륨
3. 이미지 빌드
- Docker Compose 파일에 정의된 서비스 이미지를 빌드한다.
docker-compose build
4. Django 프로젝트 생성
- Docker Compose를 사용해 컨테이너를 실행하고 Django 프로젝트를 생성한다.
- 아래 명령어의 결과로 app 폴더 안에 Django 프로젝트 디렉토리(app, manage.py, db.sqlite3)를 생성한다.
docker-compose run --rm <서비스명> django-admin startproject <프로젝트 폴더명> <프로젝트 생성위치>
docker-compose run --rm app django-admin startproject config .
- 위 명령어는 docker-compose.yml 파일에 정의된 app 서비스의 새로운 컨테이너를 생성하고,
- 현재 디렉터리(.)에 config라는 폴더를 생성하여 Django 프로젝트의 기본 파일 구조를 설정한 뒤,
- 작업이 완료된 후 컨테이너를 자동으로 제거하겠다는 의미이다.
- --rm 옵션은 명령어 실행이 완료되었을 때, 컨테이너를 자동으로 삭제하는 옵션이다.
불필요한 컨테이너가 시스템에 남지 않기에 클린한 환경을 유지할 수 있다.
5. Docker 컨테이너 실행 및 Django 확인
- Django 프로젝트를 Docker 컨테이너로 실행한다.
docker-compose up
- -d 옵션을 통해 백그라운드 실행을 할 수 있다.
- --remove-orphans 옵션을 사용해 더이상 사용되지 않는 컨테이너를 정리할 수 있다.
6. 브라우저에서 Django 확인
- 브라우저에서 http://localhost:8000으로 접속하면 Django 프로젝트가 실행 중인 것을 확인할 수 있다.
728x90
반응형
'Study > Docker' 카테고리의 다른 글
[Docker] 실행 중인 컨테이너 쉘(shell / 콘솔)에 접근하기 (0) | 2024.10.25 |
---|---|
[Docker] Docker Compose 서비스 종료 및 리소스 삭제(down) (1) | 2024.10.25 |
Docker 실행하면서 마주한 에러 모음 (2) | 2024.10.25 |
[Docker] PyCharm에 Docker 플러그인 설치 (0) | 2024.10.24 |
[Docker] 도커 데스크탑 설치 (Docker Desktop in Windows) (1) | 2024.10.24 |
댓글