[docker-compose | command] Build a Backend REST API - 20

Hyeseong·2021년 3월 3일
0
post-custom-banner

Make docker compose wait for db🎎

docker-compose.yml 파일을 수정해볼게요.

docker container와 db container간의 통신시 앞서서 19에서 설명한 것처럼 logic을 컨테이너간에도 구현하기 위해서조.

즉, 장고 app이 실행되기 전! 우선적으로 실행되어야해요.

현재 docker-compose.yml 파일의 소스코드 모습은 아래와 같아요.

변경 전

version: "3"

services:
  app:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: 
      sh -c "python manage.py runserver 0.0.0.0:8000"
    environment:
      - DB_HOST=db
      - DB_NAME=app
      - DB_USER=postgres
      - DB_PASS=supersecretpassword
    depends_on:
      - db


  db:
    image: postgres:10-alpine
    environment:
      - POSTGRES_DB=app
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=supersecretpassword

완전히 변경된 소스코드의 모습은 아래와 같아요.

변경 후

version: "3"

services:
  app:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: 
      sh -c "python manage.py wait_for_db && 
              python manage.py migrate &&
              python manage.py runserver 0.0.0.0:8000"
    environment:
      - DB_HOST=db
      - DB_NAME=app
      - DB_USER=postgres
      - DB_PASS=supersecretpassword
    depends_on:
      - db


  db:
    image: postgres:10-alpine
    environment:
      - POSTGRES_DB=app
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=supersecretpassword

하나 하나씩 뜯어보조.

step1. update docker-compose.yml

  • python manage.py wait_for_db
    • 이전 19포스트에서 작성했던 로직들을 명령어로 실행시키게되요.
  • python manage.py migrate
    • 장고에 등록된 앱들의 model들을 db의 schema로 만들거나 수정해줘요.
  • python manage.py runserver 0.0.0.0:8000
    • 장고가 서버로 올라가요.

참고로, && 기호를 명령어 중간 중간에 꼭 붙여주세요.

    command: 
      sh -c "python manage.py wait_for_db && 
              python manage.py migrate &&
              python manage.py runserver 0.0.0.0:8000"

이제 다 작성했다면

step2 docker-compose up

컨테이너를 생성 및 실행 합니다.

docker-compose up [옵션][서비스명]

옵션설명
-d백그라운드 실행
--no-deps링크 서비스 실행하지 않음
--build이미지 빌드
-t타임아웃을 지정(기본 10초)

참고 웹사이트, 도커컴포즈 명령어 정리

step3 check execution logs

빨간색으로 체크한 부분을 보면 stdout.write()로 메시지 작성했던 문자열이 보이네요.

profile
어제보다 오늘 그리고 오늘 보다 내일...
post-custom-banner

0개의 댓글