Programming/장고(django) - API

장고(django)/ 도커 배포

esoog Polaris 2024. 11. 17. 14:50

### **먼저 Docker란?**
Docker는 애플리케이션을 **컨테이너(Container)**라는 독립된 환경에서 실행할 수 있도록 도와주는 플랫폼입니다. 컨테이너는 애플리케이션과 그에 필요한 모든 것을 포함한 가벼운 가상화 환경입니다.  

#### **주요 개념**
1. **이미지 (Image)**  
   - 컨테이너의 실행을 위한 **템플릿**입니다. 애플리케이션 코드, 런타임, 라이브러리, 환경설정 등을 포함합니다.  
   - 예: Python 애플리케이션을 실행하기 위한 Python 이미지.

2. **컨테이너 (Container)**  
   - 이미지를 기반으로 실행된 **독립된 실행 환경**입니다.  
   - 예: 실제로 Python 애플리케이션이 실행되는 공간.

3. **Dockerfile**  
   - 이미지를 만들기 위한 스크립트입니다.  
   - 예: 특정 애플리케이션을 설치하고 실행 환경을 설정하는 코드.

4. **Docker Hub**  
   - Docker 이미지의 중앙 저장소로, 미리 만들어진 이미지를 다운로드하거나 직접 올릴 수 있습니다.

 

 

 


### **Docker 사용료**
- **Docker Desktop**  
  - **무료 플랜**: 개인 사용자 및 소규모 기업 (직원 수 250명 이하, 연매출 $10M 이하).  
  - **유료 플랜**: 기업 환경에서 사용 시, 기능 추가 제공.
    - **Pro**: $5/월  
    - **Team**: $9/월  
    - **Business**: $21/월  

- **Docker Engine** (CLI 및 컨테이너 실행에 사용)  
  - 오픈소스, 무료로 사용 가능.

 

 



### **Docker는 언제 유용할까?**
1. **다양한 개발 환경 테스트**  
   - 여러 버전의 Python, Node.js, Java 등을 손쉽게 실행.  
2. **마이크로서비스 아키텍처**  
   - 각각의 서비스가 독립된 컨테이너로 실행.  
3. **CI/CD 파이프라인**  
   - 지속적 통합 및 배포에 활용.

 

 

 

1. 그래서 장고를 도커에 어떻게 사용하느냐?

### 1. **Docker 설치**
Docker가 시스템에 설치되어 있어야[Docker 설치 링크](https://www.docker.com/).

 

Docker: Accelerated Container Application Development

Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

 

 

### 2. **`Dockerfile` 생성**
`Dockerfile`(파일 확장자 없음)을 프로젝트 루트에 추가 후 아래 내용 삽입:

 

FROM python:3.10.15

WORKDIR C:\Users\winst\Documents\project\django_api-main
# 프로젝트 폴더 위치. manage.py를 가지고 있는 폴더의 위치

COPY . .
# 프로젝트의 모든 파일을 복사 -> 이미지 파일

RUN pip install -r requirements.txt
# requirements.txt에 적혀있는 pip들을 설치

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
# 이 문장은 컨테이너가 실행될 때 기본으로 실행할 명령을 지정
# 만약 gunicorn을 사용한다면 CMD ["gunicorn", "--bind", "0.0.0.0:8000", "config.wsgi:application"]

EXPOSE 8000
# django 서버의 포트를 따라 Docker의 컨테이너 8000 포트
# 장고의 기본 포트번호는 8000

 

 

* 참고로 데이터베이스 태그에서 호스트는

'HOST': 'host.docker.internal',



### 3. **`requirements.txt` 생성** (bash)
현재 프로젝트의 Python 패키지를 `requirements.txt`에 추가:

pip freeze > requirements.txt



### 4. **Docker 이미지 빌드**(bash): 도커 데스크탑이 실행되어 있어야 함

docker build -t my-django-app .



### 5. **컨테이너 실행**

docker run -p 8000:8000 my-django-app



반응형