일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- stopcoroutine
- JSON
- C#
- implicit Conversion
- 오버플로우
- 구독
- Fetch
- useEffect
- 중단
- 유니티
- OnMouseClick
- File
- 훅
- Explicit Conversion
- 명시적형변환
- Unity
- GetKey
- 마우스
- 코루틴
- 불러오기
- 클래스
- Subscribe
- 암시적형변환
- 키보드
- 팁
- >.NET
- 저장
- oveflow
- 리액트네이티브
- 리액트
- Today
- Total
Log to grow
[Django & Docker] docker-compose로 로컬 서버 띄우기 본문
** 로컬에 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
아래와 같이 로컬 서버가 실행되는 것을 확인할 수 있습니다.
'BE > Django' 카테고리의 다른 글
[Django] nginx, uwsgi 이용하여 배포하기 (aws ec2, rds) (0) | 2021.01.10 |
---|---|
[Django] 시작하기 (가상환경, 프로젝트 생성) (0) | 2020.12.26 |