CodeGym /행동 /Docker SELF /Docker Compose에서 애플리케이션 디버깅

Docker Compose에서 애플리케이션 디버깅

Docker SELF
레벨 16 , 레슨 3
사용 가능

9.1 디버깅 도구와 명령어

Docker Compose는 멀티 컨테이너 애플리케이션 개발과 배포를 훨씬 쉽게 만드는데, 다른 기술들과 마찬가지로 문제 상황이 발생할 수 있고, 이를 디버깅하고 해결해야 할 필요가 생긴다. 이번 강의에서는 Docker Compose에서 발생하는 오류를 찾고 애플리케이션을 디버깅하기 위한 주요 접근법과 도구들을 살펴볼 거야.

주요 문제와 해결 방법:

  1. 컨테이너 실행 문제:
    • 컨테이너 로그 확인.
    • 컨테이너 상태 확인.
    • 구성 파일 확인.
  2. 네트워크 문제:
    • 네트워크 연결 확인.
    • 컨테이너 내부에서 네트워크 유틸리티 사용.
  3. 볼륨 관련 문제:
    • 볼륨 마운트 확인.
    • 볼륨 접근 권한 확인.

디버깅 도구와 명령어:

1. 컨테이너 로그 확인

컨테이너 로그는 문제가 발생했을 때 가장 먼저 확인해야 할 곳이야. docker compose logs 명령은 compose.yaml에 정의된 모든 서비스의 로그를 확인할 수 있어.

Terminal

docker compose logs

특정 서비스의 로그를 확인하려면:

Terminal

docker compose logs <service_name>

2. 컨테이너 상태 확인

docker compose ps 명령은 Docker Compose가 관리하는 모든 컨테이너 상태 정보를 표시해줘.

Terminal

docker compose ps

이 명령의 출력에서는 컨테이너의 상태, 포트, 그리고 ID를 확인할 수 있어.

3. 컨테이너 재시작

컨테이너가 제대로 작동하지 않을 때는, 이를 재시작해보는 것도 방법이야:

Terminal

docker compose restart <service_name>

4. 실행 중인 컨테이너에 접속

문제를 더 자세히 조사하려면 docker compose exec 명령으로 실행 중인 컨테이너에 접속할 수 있어.

Terminal

docker compose exec <service_name> /bin/bash

이 명령은 컨테이너 내부에서 터미널을 열어, 진단 명령을 실행할 수 있도록 해줘.

5. 네트워크 유틸리티 사용

컨테이너 내부에서 네트워크 연결을 확인하는 건 네트워크 관련 문제를 진단하는 데 도움이 돼. ping, curl, netcat 같은 유틸리티를 사용할 수 있어.

Terminal

docker compose exec <service_name> ping <hostname>

docker compose exec <service_name> curl http://<hostname>

docker compose exec <service_name> netcat -z -v <hostname> <port>

9.2 고급 접근법

오류를 찾는 추가적인 방법

1. Docker Compose 파일 확인

compose.yaml 파일의 오류는 컨테이너가 올바르게 작동하지 않을 수 있어. 이 명령어로 파일 구문을 확인해봐:

Terminal

docker compose config

이 명령어는 파일에 오류가 있는지 검사하고 최종적으로 구성된 설정을 보여줄 거야.

2. Healthcheck 사용하기

compose.yaml에서 서비스의 healthcheck를 정의해서 Docker가 자동으로 컨테이너 상태를 확인하도록 만들 수 있어.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3

3. 볼륨 마운팅 확인

볼륨 관련 문제는 잘못된 마운팅이나 권한 부족 때문에 발생할 수 있어. 볼륨이 올바르게 마운트되었고 컨테이너가 접근 권한을 가지고 있는지 확인해봐.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

3.1 볼륨 접근성 확인

컨테이너에서 볼륨에 접근 가능한지 확인하려면, 컨테이너를 실행한 뒤 볼륨에 대한 (예: 볼륨 내 파일 리스트 보기) 명령어를 실행해봐. 볼륨이 /mnt/volume에 마운트되었다고 가정하자:

Terminal

docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume

볼륨에 접근 가능하면, ls 명령어가 볼륨 안의 파일 및 디렉토리를 보여줄 거야. 볼륨에 접근할 수 없거나 비어 있다면, 적절한 메시지가 표시될 거야.

3.2 볼륨의 가용 용량 확인

컨테이너 내부에서 볼륨의 사용 가능한 용량을 확인하려면, df 명령어를 사용해봐:

Terminal

docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume

이 명령어는 마운트된 파일 시스템의 사용 가능한 용량을 보여줘. -h 옵션은 MB, GB와 같은 단위가 포함된 읽기 쉬운 포맷으로 정보를 출력해줘.

4. IDE 사용하기

디버깅이 더 쉬워지도록, 디버그 기능과 로깅을 지원하는 IDE 사용을 추천해. --file 옵션을 사용하면 개발과 프로덕션용으로 별도 구성 파일을 만들어 사용할 수 있어.

Terminal

docker compose --file docker-compose.dev.yml up

중요! 여기 Docker 안에서 실행 중인 애플리케이션 원격 디버깅 설정에 대한 유용한 가이드가 있어. IntelliJ IDEA를 통해 이런 걸 설정할 수 있어: 원격 디버깅 설정 .

5. 환경 변수 확인

잘못된 환경 변수나 누락된 변수는 문제를 일으킬 수 있어. .env 파일이나 compose.yaml 안에서 필요한 모든 변수가 설정되었는지 확인해봐.

Yaml

version: '3.8'

services:
  app:
    image: myapp:latest
    environment:
      - APP_ENV=development
      - DEBUG=true

9.3 디버깅 명령어 예제

디버깅 명령어 사용 예제

예시 1: 데이터베이스 연결 문제 확인 및 수정

web 서비스 로그 확인:

Terminal

docker compose logs web

webdb 사이의 네트워크 연결 확인:

Terminal

docker compose exec web ping db
docker compose exec web curl http://db:5432

web 컨테이너에 접속하여 진단:

Terminal

docker compose exec web /bin/bash

예시 2: 볼륨 문제 확인

볼륨 마운트 확인:

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data
    
volumes:
  db-data:

db 컨테이너에 접속하여 데이터 확인:

Terminal

docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
1
Опрос
서비스 스케일링,  16 уровень,  3 лекция
недоступен
서비스 스케일링
서비스 스케일링
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION