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
하나 하나씩 뜯어보조.
참고로, && 기호를 명령어 중간 중간에 꼭 붙여주세요.
command:
sh -c "python manage.py wait_for_db &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
이제 다 작성했다면
컨테이너를 생성 및 실행 합니다.
docker-compose up [옵션][서비스명]
옵션 | 설명 |
---|---|
-d | 백그라운드 실행 |
--no-deps | 링크 서비스 실행하지 않음 |
--build | 이미지 빌드 |
-t | 타임아웃을 지정(기본 10초) |
빨간색으로 체크한 부분을 보면 stdout.write()
로 메시지 작성했던 문자열이 보이네요.