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

Hyeseong·2021년 3월 3일
0

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
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글

관련 채용 정보