[docker-compose | command] Build a Backend REST API - 20
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()
로 메시지 작성했던 문자열이 보이네요.
Author And Source
이 문제에 관하여([docker-compose | command] Build a Backend REST API - 20), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyeseong-dev/docker-compose-command-Build-a-Backend-REST-API-20저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)