Log to grow

[Django & Docker] docker-compose로 로컬 서버 띄우기 본문

BE/Django

[Django & Docker] docker-compose로 로컬 서버 띄우기

kkkrrr 2021. 1. 5. 11:02

 

** 로컬에 Docker가 설치되어 있다고 가정합니다.

 

1. Dockerfile 생성

Dockerfile이란 Docker image를 빌드하는데 필요한 명령어들을 모아놓은 파일입니다.

docker build 명령어를 실행하면 docker는 Dockerfile의 명령어를 실행하여 이미지를 빌드합니다.

 

- Dockerfile은 확장자 없이 루트 디렉토리에 생성합니다. vscode에서 생성하면 귀여운 아이콘이 따라옵니다.

 

- tag

Dockerfile의 가장 위에는 어떤 이미지를 가져올 것인지를 태그로 명시합니다.

여기에서는 python:3.7 태그를 사용하겠습니다.

더 많은 태그는 hub.docker.com/_/python 에서 확인할 수 있습니다.

FROM python:3.7

 

- maintainer

선택사항이지만 maintainer가 누군지 명시할 수 있습니다.

FROM python:3.7
MAINTAINER hyeonwoo

 

- ENV

ENV 명령어를 이용하여 이미지에 필요한 환경변수를 설정할 수 있습니다.

여기에서는 PYTHONUNBUFFERD를 1로 설정하여 python이 unbuffered mode로 실행되도록 하겠습니다.

unbuffered mode에서는 output을 버퍼에 저장하지 않고 바로 출력합니다.

FROM python:3.7-alpine
MAINTAINER hyeonwoo

# set unbuffered mode
ENV PYTHONUNBUFFERD 1

 

- app 폴더를 working directory로 설정

도커 컨테이너 내부에서 working directory로 /app을 사용할 수 있게 합니다.

FROM python:3.7-alpine
MAINTAINER hyeonwoo

ENV PYTHONUNBUFFERD 1

WORKDIR /app

 

- Copy requirements.txt

이제 생성한 이미지에 필요한 모듈과 패키지를 설치할 차례입니다.

Django에서는 requirements.txt 파일에 명시되어 있으므로 이를 도커 이미지에 복사해줍니다.

FROM python:3.7-alpine
MAINTAINER hyeonwoo

ENV PYTHONUNBUFFERD 1

WORKDIR /app

# copy requirements to docker image
COPY requirements.txt /app/requirements.txt

 

그리고 복사한 requirements.txt파일을 이용하여 패키지들을 설치해줍니다.

FROM python:3.7-alpine
MAINTAINER hyeonwoo

ENV PYTHONUNBUFFERD 1


COPY ./requirements.txt /requirements.txt
# install requirements to docker image
RUN pip install -r requirements.txt

 

- 소스코드 

이제 프로젝트 소스코드를 도커 이미지에 복사할 차례입니다.

현재 디렉토리(.)를 /app 디렉토리에 복사해줍니다.

FROM python:3.7-alpine
MAINTAINER hyeonwoo

ENV PYTHONUNBUFFERD 1


COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

# copy source code
COPY . /app 

 

- runserver 커맨드

마지막으로 로컬서버를 실행시킬 커맨드를 입력해줍니다.

도커 컨테이너 내부 포트는 8000번으로 설정합니다.

FROM python:3.7-alpine
MAINTAINER hyeonwoo

ENV PYTHONUNBUFFERD 1


COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

COPY . /app 

# runserver
CMD python manage.py runserver 0.0.0.0:8000

 

2. docker-compose.yml 파일

docker-compose.yml 파일을 Dockerfile과 같은 루트 디렉토리에 생성합니다.

그리고 최상단에 아래와 같이 작성합니다.

docker-compose 버전은 3으로 하고, service들을 포함할 services 를 입력해줍니다.

version: '3'
services: 

 

- 웹 서버

첫 번째로 웹 서버용 컨테이너를 만들겠습니다.

서비스 이름은 'backend'로 하고, 아래에는 빌드에 관한 정보를 써줍니다.

context에는 현재 디렉토리를 입력하여 현재 디렉토리를 빌드할 것을 알려주고, Dockerfile의 이름을 명시해줍니다.

version: '3' 
services: 
  backend: 
    build:
      context: . 
      dockerfile: Dockerfile

 

그리고 포트와 볼륨을 명시해줍니다.

ports: 에서 첫번째 8000은 외부에 열어놓는 포트이고, 두 번째 8000은 Dockerfile에서 runserver 뒤에 입력한 도커 컨테이너 내부 포트입니다.

volumes 에는 로컬 디렉토리와 도커 컨테이너에 저장될 경로를 차례로 써줍니다.

로컬 디렉토리(.) 내의 파일이 변경될 때마다 이를 /app에 업데이트합니다.

version: '3'
services: 
  backend:
    build:
      context: . 
      dockerfile: Dockerfile
    ports:
      - 8000:8000
    volumes:
      - .:/app 

 

 

3. docker-compose로 서비스 실행

Dockerfile과 docker-compose.yml 작성을 마쳤다면 서버를 실행해볼 차례입니다.

터미널에 아래 두 명령어를 차례로 입력합니다.

docker-compose build
docker-compose up

아래와 같이 로컬 서버가 실행되는 것을 확인할 수 있습니다.

 

Comments