FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN apt-get -y update && apt-get -y install vim && apt-get clean
RUN mkdir /project
ADD . /project
WORKDIR /project
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
1) FROM python:3.8
- 파이썬 3.8 버전을 베이스 이미지로 사용
2) RUN mkdir /code
- 컨테이너에 /code 디렉토리를 생성
3) WORKDIR /code
- /code 디렉토리로 워킹 디렉토리를 변경
4) ADD ./backend/requirements.txt /code/
- 로컬 위치의 requirements.txt 파일을 /code 디렉토리 하위로 복사
5) pip install
- 프로젝트에 필요한 패키지 설치
6) ADD . /code/
- 로컬 위치의 모든 파일 돌더를 /code 디렉토리 하위로 복사
version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile
command: gunicorn backend.wsqi.application --bind 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
1) version
- docker compose 정의 파일의 버전
2) services
- 서비스 정의
3) web
- 서비스 명
4) build
- 빌드 지정
5) context
- Dockerfile이 있는 디렉토리 경로
6) dockerfile
- 도커파일 명
7) command
- 컨테이너 안에서 작동하는 명령 지정
- 베이스 임지ㅣ에 지정되어 있을 경우 덮어쓴다.
8) volumes
- 컨테이너에 볼륨을 마운트
$ docker-compose up --build
위 명령어로 실행한 뒤 웹 브라우저에서 Django 프로그램이 실행되는지 확인
위에서 작성한 docker-compose.yml 파일을 수정한다.
version: '3'
services:
nginx:
image:
nginx:latest
ports:
- "80:80"
volumes:
- .:/code
- ./nginx/nginx:/etc/nginx.conf.d
depends_on:
- web
web:
build:
context: .
dockerfile: Dockerfile
command: gunicorn backend.wsqi.application --bind 0.0.0.0:8000
volumes:
- .:/code
expose:
- "8000"
1) image
- 도커 이미지
2) depends_on
- 서비스의 의존 관계 정의
- nginx 컨테이너를 시작하기 전에 web 컨테이너를 시작
- depends_on은 컨테이너의 시작 순서만 제어
- 컨테이너 상의 애플리케이션이 이용 가능해 질 때 까지 기다리고 제어하지 않는다.
worker_process auto;
events{
}
http{
server{
listen 80;
include mime.types;
location /static/ {
alias /data/static
}
location /medai/{
alias /data/media/
}
location / {
proxy_pass http://django_container_gunicorn:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
$ pip install gunicorn
$ pip freeze > requirements.txt
...
...
ALLOWED_HOSTS = ["web"]
...
..
.
$ docker-compose up --build