Docker Compose의 종속성과 문제 해결

중급 Docker

Mike Metzger

Data Engineering Consultant

종속성이란?

  • 종속성은 리소스 시작 순서를 정의함
  • 리소스(컨테이너)는 다른 리소스를 필요로 할 수 있음
  • 웹 앱 예시
    • 데이터베이스 컨테이너 postgresql이 먼저 시작되어야 함

컨테이너 종속성 예시 - postgres

중급 Docker

종속성이란?

  • 종속성은 리소스 순서를 정의함
  • 리소스(컨테이너)는 다른 리소스를 필요로 할 수 있음
  • 웹 앱 예시
    • 데이터베이스 컨테이너 postgresql이 먼저 시작
    • 그다음 python_app

컨테이너 종속성 예시 - python_app

중급 Docker

종속성이란?

  • 종속성은 리소스 순서를 정의함
  • 리소스(컨테이너)는 다른 리소스를 필요로 할 수 있음
  • 웹 앱 예시
    • 데이터베이스 컨테이너 postgresql이 먼저 시작
    • 그다음 python_app
    • 마지막으로 nginx 웹 서버

컨테이너 종속성 예시 - 전체

중급 Docker

depends_on

  • depends_on 속성으로 종속성 정의
  • 예시처럼 종속성을 체인으로 연결 가능
  • 필요 시 한 리소스에 여러 종속성 지정 가능
  • compose.yaml의 순서는 중요하지 않음
services:
  postgresql:
    image: postgresql:latest

python_app: image: custom_app depends_on: - postgresql
nginx: image: nginx/latest depends_on: - python_app
중급 Docker

애플리케이션 종료

  • 애플리케이션 종료는 역순으로 진행됨
  • nginx 리소스를 먼저 중지

컨테이너 종속성 예시 - 전체

중급 Docker

애플리케이션 종료

  • 애플리케이션 종료는 역순으로 진행됨
  • nginx 리소스를 먼저 중지
  • 그다음 python_app 리소스를 중지

컨테이너 종속성 예시 - python_app

중급 Docker

애플리케이션 종료

  • 애플리케이션 종료는 역순으로 진행됨
  • nginx 리소스를 먼저 중지
  • 그다음 python_app 리소스를 중지
  • 마지막으로 postgresql 리소스를 중지

컨테이너 종속성 예시 - postgres

중급 Docker

기타 옵션

  • Docker Compose에는 다른 종속성 옵션도 있음
  • condition:은 리소스 준비 완료 판단 기준을 정의
    • service_started - 리소스가 정상 시작됨
      • 기본 동작
    • service_completed_successfully - 초기 구성 등 작업이 완료됨
    • service_healthy - healthcheck 기준을 충족함
services:
  nginx:
    image: nginx/latest
    depends_on:
      python_app:
        condition: service_started

python_app: image: custom_app depends_on: postgresql: condition: service_healthy
중급 Docker

Docker Compose 문제 해결 도구

  • Docker Compose에는 추가 문제 해결 도구가 있음
  • docker compose logs - 애플리케이션의 모든 리소스 출력을 수집
    redis-1  | * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    redis-1  | * Running mode=standalone, port=6379.
    redis-1  | * Server initialized
    redis-1  | * Ready to accept connections tcp
    web-1    | * Serving Flask app 'app.py'
    web-1    |  * Running on all addresses (0.0.0.0)
    web-1    |  * Running on http://172.20.0.2:5000
    web-1    | Press CTRL+C to quit
    
  • docker compose logs <resourcename>
중급 Docker

docker compose top

  • docker compose top은 애플리케이션 내 리소스 상태를 표시
composetest-redis-1
UID   PID    PPID   C    STIME   TTY   TIME       CMD
999   2767   2726   0    01:16   ?     00:03:27   redis-server *:6379

composetest-web-1
UID    PID    PPID   C    STIME   TTY   TIME       CMD
root   2768   2740   0    01:16   ?     00:00:23   /usr/local/bin/python /usr/local/bin/flask run
중급 Docker

연습해 봅시다!

중급 Docker

Preparing Video For Download...