
2편 Docker 설치 방법 총정리 (윈도우 / 리눅스 / 시놀로지 NAS)
이전 글에서 Docker 설치를 완료했다면 이제 실제 서버 구조를 만들어야 합니다.
이번 글 핵심 목표
- Django + PostgreSQL + Nginx 구성
- docker-compose로 한 번에 실행
- 실전 배포 구조 이해
프로젝트 구조 만들기
아래와 같은 구조로 폴더를 구성합니다.
project/
│
├── docker-compose.yml
├── Dockerfile
├── nginx/
│ └── default.conf
│
├── app/
│ ├── manage.py
│ └── myproject/
│
└── requirements.txt
1️⃣ Dockerfile 작성
Dockerfile이란?
Docker 컨테이너 안에서 실행될 환경을 정의하는 파일입니다.
쉽게 말하면 “서버를 자동으로 설치하는 설치 설명서”라고 보면 됩니다.
Docker 컨테이너 안에서 실행될 환경을 정의하는 파일입니다.
쉽게 말하면 “서버를 자동으로 설치하는 설치 설명서”라고 보면 됩니다.
FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]
설정 설명
- FROM python:3.11 → Python 실행 환경 생성
- WORKDIR /app → 작업 디렉토리 설정
- COPY requirements.txt → 필요한 라이브러리 복사
- RUN pip install → 패키지 설치
- CMD gunicorn → Django 서버 실행
2️⃣ requirements.txt
Django 프로젝트 실행에 필요한 Python 라이브러리를 정의하는 파일입니다.
Django
gunicorn
psycopg2-binary
라이브러리 설명
- Django → 웹 프레임워크
- gunicorn → Django 실행 서버 (WAS)
- psycopg2-binary → PostgreSQL 연결 라이브러리
3️⃣ docker-compose.yml
docker-compose란?
여러 개의 컨테이너를 한 번에 실행하고 관리할 수 있는 도구입니다.
Django + DB + Nginx를 동시에 실행할 때 필수입니다.
여러 개의 컨테이너를 한 번에 실행하고 관리할 수 있는 도구입니다.
Django + DB + Nginx를 동시에 실행할 때 필수입니다.
version: '3'
services:
web:
build: .
command: gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:15
restart: always
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data/
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web
volumes:
postgres_data:
설정 설명
- web → Django 서버 컨테이너
- db → PostgreSQL 데이터베이스
- nginx → 웹 서버 (외부 접속 담당)
- depends_on → 실행 순서 지정
- volumes → 데이터 영구 저장
4️⃣ Nginx 설정
Nginx 역할
사용자의 요청을 받아 Django 서버로 전달하는 “중간 관리자” 역할을 합니다.
또한 CSS, JS 같은 정적 파일을 빠르게 처리합니다.
사용자의 요청을 받아 Django 서버로 전달하는 “중간 관리자” 역할을 합니다.
또한 CSS, JS 같은 정적 파일을 빠르게 처리합니다.
server {
listen 80;
location / {
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /static/ {
alias /app/static/;
}
}
설정 설명
- proxy_pass → Django 서버로 요청 전달
- web:8000 → Docker 내부 서비스 주소
- /static/ → 정적 파일 처리 경로
5️⃣ Django DB 설정
Django가 PostgreSQL 데이터베이스와 연결하기 위한 설정입니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'db',
'PORT': 5432,
}
}
설정 설명
- ENGINE → 사용할 DB 종류
- HOST = db → docker-compose 서비스 이름
- PORT → PostgreSQL 기본 포트
6️⃣ 실행 방법
docker-compose up --build
처음 실행 시에는 반드시 --build 옵션을 사용해야 합니다.
docker compose -f docker-compose.yml up --build
.yml 파일명으로 실행 시키기 위해서는 -f 옵션을 넣어서 사용해야 합니다.
함께 보면 좋은 글 + 추천 유틸리티
- Docker Compose 생성기
- Django + Nginx + Docker 서버 구축 전체 구조 정리
- 2편 Docker 설치 방법 총정리 (윈도우 / 리눅스 / 시놀로지 NAS)
마무리
이 단계까지 완료하면 로컬 환경에서 실제 서버와 동일한 구조를 구성한 상태입니다.
이제 단순 개발이 아니라 실제 서비스 운영 가능한 환경입니다.
다음 글에서는 Django production 설정과 static 처리까지 이어서 진행합니다.
첫 댓글을 남겨보세요.