9.1 디버깅 도구와 명령어
Docker Compose는 멀티 컨테이너 애플리케이션 개발과 배포를 훨씬 쉽게 만드는데, 다른 기술들과 마찬가지로 문제 상황이 발생할 수 있고, 이를 디버깅하고 해결해야 할 필요가 생긴다. 이번 강의에서는 Docker Compose에서 발생하는 오류를 찾고 애플리케이션을 디버깅하기 위한 주요 접근법과 도구들을 살펴볼 거야.
주요 문제와 해결 방법:
- 컨테이너 실행 문제:
- 컨테이너 로그 확인.
- 컨테이너 상태 확인.
- 구성 파일 확인.
- 네트워크 문제:
- 네트워크 연결 확인.
- 컨테이너 내부에서 네트워크 유틸리티 사용.
- 볼륨 관련 문제:
- 볼륨 마운트 확인.
- 볼륨 접근 권한 확인.
디버깅 도구와 명령어:
1. 컨테이너 로그 확인
컨테이너 로그는 문제가 발생했을 때 가장 먼저 확인해야 할 곳이야. docker compose logs
명령은 compose.yaml
에 정의된 모든 서비스의 로그를 확인할 수 있어.
docker compose logs
특정 서비스의 로그를 확인하려면:
docker compose logs <service_name>
2. 컨테이너 상태 확인
docker compose ps
명령은 Docker Compose가 관리하는 모든 컨테이너 상태 정보를 표시해줘.
docker compose ps
이 명령의 출력에서는 컨테이너의 상태, 포트, 그리고 ID를 확인할 수 있어.
3. 컨테이너 재시작
컨테이너가 제대로 작동하지 않을 때는, 이를 재시작해보는 것도 방법이야:
docker compose restart <service_name>
4. 실행 중인 컨테이너에 접속
문제를 더 자세히 조사하려면 docker compose exec
명령으로 실행 중인 컨테이너에 접속할 수 있어.
docker compose exec <service_name> /bin/bash
이 명령은 컨테이너 내부에서 터미널을 열어, 진단 명령을 실행할 수 있도록 해줘.
5. 네트워크 유틸리티 사용
컨테이너 내부에서 네트워크 연결을 확인하는 건 네트워크 관련 문제를 진단하는 데 도움이 돼. ping, curl, netcat 같은 유틸리티를 사용할 수 있어.
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
파일의 오류는 컨테이너가 올바르게 작동하지 않을 수 있어. 이 명령어로 파일 구문을 확인해봐:
docker compose config
이 명령어는 파일에 오류가 있는지 검사하고 최종적으로 구성된 설정을 보여줄 거야.
2. Healthcheck 사용하기
compose.yaml
에서 서비스의 healthcheck를 정의해서 Docker가 자동으로 컨테이너 상태를 확인하도록 만들 수 있어.
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. 볼륨 마운팅 확인
볼륨 관련 문제는 잘못된 마운팅이나 권한 부족 때문에 발생할 수 있어. 볼륨이 올바르게 마운트되었고 컨테이너가 접근 권한을 가지고 있는지 확인해봐.
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
3.1 볼륨 접근성 확인
컨테이너에서 볼륨에 접근 가능한지 확인하려면, 컨테이너를 실행한 뒤 볼륨에 대한 (예: 볼륨 내 파일 리스트 보기) 명령어를 실행해봐. 볼륨이 /mnt/volume에 마운트되었다고 가정하자:
docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume
볼륨에 접근 가능하면, ls
명령어가 볼륨 안의 파일 및 디렉토리를 보여줄 거야. 볼륨에 접근할 수 없거나 비어 있다면, 적절한 메시지가 표시될 거야.
3.2 볼륨의 가용 용량 확인
컨테이너 내부에서 볼륨의 사용 가능한 용량을 확인하려면, df
명령어를 사용해봐:
docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume
이 명령어는 마운트된 파일 시스템의 사용 가능한 용량을 보여줘. -h
옵션은 MB, GB와 같은 단위가 포함된 읽기 쉬운 포맷으로 정보를 출력해줘.
4. IDE 사용하기
디버깅이 더 쉬워지도록, 디버그 기능과 로깅을 지원하는 IDE 사용을 추천해. --file
옵션을 사용하면 개발과 프로덕션용으로 별도 구성 파일을 만들어 사용할 수 있어.
docker compose --file docker-compose.dev.yml up
중요!
여기 Docker 안에서 실행 중인 애플리케이션 원격 디버깅 설정에 대한 유용한 가이드가 있어. IntelliJ IDEA를 통해 이런 걸 설정할 수 있어: 원격 디버깅 설정 .
5. 환경 변수 확인
잘못된 환경 변수나 누락된 변수는 문제를 일으킬 수 있어. .env
파일이나 compose.yaml
안에서 필요한 모든 변수가 설정되었는지 확인해봐.
version: '3.8'
services:
app:
image: myapp:latest
environment:
- APP_ENV=development
- DEBUG=true
9.3 디버깅 명령어 예제
디버깅 명령어 사용 예제
예시 1: 데이터베이스 연결 문제 확인 및 수정
web
서비스 로그 확인:
docker compose logs web
web
와 db
사이의 네트워크 연결 확인:
docker compose exec web ping db
docker compose exec web curl http://db:5432
web
컨테이너에 접속하여 진단:
docker compose exec web /bin/bash
예시 2: 볼륨 문제 확인
볼륨 마운트 확인:
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
db
컨테이너에 접속하여 데이터 확인:
docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
GO TO FULL VERSION