본문 바로가기

Docker

docker를 이용하여 django 배포하기

Docker를 사용하다 보면 여러 컨테이너를 설정하고 생성해야 하는 경우가 생기는데 도커 컴포즈를 사용하면 컨테이너 실행에 필요한 옵션을docker-compose.yml이라는 파일에 적어둘 수 있고, 컨테이너 간 실행 순서나 의존성도 관리할 수 있습니다.

1. docker-compose.yml 생성하기

프로젝트 폴더에 docker-compose.yml 파일을 만들고 이렇게 작성합니다.

# 파일 규격 버전
version: '3'

volumes:
  django_sample_db_dev: {}
  
# 실행 하려는 컨테이너를 정의
services:
  # 서비스의 이름을 정의    
  django:
   # build시 옵션을 정의
    build:
      context: .
      dockerfile: ./compose/django/Dockerfile-dev
    # 환경변수 리스트를 정의한다.
    environment:
      - DJANGO_DEBUG=True
      - DJANGO_DB_HOST=database
      - DJANGO_DB_PORT=5432
      - DJANGO_DB_NAME=sampledb
      - DJANGO_DB_USERNAME=sampleuser
      - DJANGO_DB_PASSWORD=samplesecret
      - DJANGO_SECRET_KEY=dev_secret_key
    # 호스트 포트와 컨테이너 포트를 어떻게 연결할지 정의
    ports:
      - "8000:8000"
    # 컨테이너 실행 명령
    command: 
      - bash
      - -c
      - |
        python manage.py migrate
        python manage.py runserver 0:8000
    # 루트 디렉토리를 컨테이너 안의 /app 디렉토리와 연결  
    volumes:
      - ./:/app/

  db:
   # database 서비스에서 사용할 도커 이미지
    image: postgres
    # django_sample_db_dev 디렉토리를 컨테이너 var/lib/postgresql/dat 디렉토리와 연결
    volumes:
      - django_sample_db_dev:/var/lib/postgresql/data
    # 환경변수 리스트를 정의한다.
    environment:
      - POSTGRES_DB=sampledb
      - POSTGRES_USER=sampleuser
      - POSTGRES_PASSWORD=samplesecret
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8

2. docker-compose 실행

# docker-compose
$ docker-compose up

# container 목록 조회
$ docker ps
CONTAINER ID        IMAGE                                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
16eb7dfc1344        postgres                                  "docker-entrypoint.s…"   47 seconds ago      Up 46 seconds       5432/tcp                 django-sample-for-docker-compose_db_1
7477621fcd4f        django-sample-for-docker-compose_django   "bash -c 'python man…"   47 seconds ago      Up 46 seconds       0.0.0.0:8000->8000/tcp   django-sample-for-docker-compose_django_1

3. 확인

docker-compose 로 실행한 django