1. 개요

이 사용방법(예제)에서는 IntelliJ에서 Docker 컨테이너를 디버깅하는 방법을 살펴봅니다 . 테스트할 준비가 된 Docker 이미지가 있다고 가정합니다. Docker 이미지를 빌드하는 방법에는 여러 가지가 있습니다 .

IntelliJ는 공식 웹사이트 에서 다운로드할 수 있습니다 .

이 기사에서는 이 단일 클래스 기반 Java 애플리케이션을 참조합니다 . 쉽게 도커화, 빌드 및 테스트 할 수 있습니다 .

테스트를 시작하기 전에 Docker 엔진이 시작되어 컴퓨터에서 실행 중인지 확인해야 합니다.

2. Dockerfile 구성 사용

Docker 파일 구성을 사용할 때 Dockerfile을  선택하고 이미지 이름, 이미지 태그, 컨테이너 이름 및 구성 이름에 적절한 이름을 제공하기만 하면 됩니다 . 포트 매핑이 있는 경우 추가할 수도 있습니다.

도커 파일을 사용하여 구성

이 구성이 저장되면 디버그 옵션에서 이 구성을 선택하고 디버그를 누를 수 있습니다. 먼저 이미지를 빌드하고 Docker 엔진에 이미지를 등록한 다음 Docker화된 애플리케이션을 실행합니다.

3. Docker 이미지 구성 사용

Docker 이미지 구성을 사용할 때 미리 빌드한 애플리케이션의 이미지 이름, 이미지 태그 및 컨테이너 이름을 제공해야 합니다. 표준 Docker 명령을 사용하여 이미지를 빌드하고 Docker 엔진에 컨테이너를 등록할 수 있습니다. 포트 매핑이 있는 경우 추가할 수도 있습니다.

도커 이미지를 사용하여 구성

이 구성이 저장되면 디버그 옵션에서 이 구성을 선택하고 디버그를 누를 수 있습니다. 미리 빌드된 Docker 이미지와 컨테이너를 선택하고 실행하기만 하면 됩니다.

4. 원격 JVM 디버그 구성 사용

원격 JVM 구성은 사전 실행 중인 모든 Java 프로세스에 연결됩니다. 따라서 먼저 Docker 컨테이너를 개별적으로 실행해야 합니다.

Java 8용 Docker 이미지를 실행하는 명령은 다음과 같습니다.

docker run -d -p 8080:8080  -p 5005:5005 -e JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n" docker-java-jar:latest

Java 11을 사용하는 경우 다음 명령을 대신 사용합니다.

docker run -d -p 8080:8080  -p 5005:5005 -e JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=n" docker-java-jar:latest

여기서 docker-java-jar는 이미지 이름이고 latest 는 해당 태그입니다. 일반 HTTP 포트인 8080 외에도 -p 확장을 사용하여 원격 디버깅을 위해 추가 포트인 5005 매핑하고 있습니다 . 분리 모드에서 도커를 실행하기 위해 -d 확장을 사용 하고 JAVA_TOOL_OPTIONS를 환경 변수로 Java 프로세스에 전달하기 위해 -e를 사용 하고 있습니다 .

JAVA_TOOL_OPTIONS  에서 -agentlib :jdwp=transport=dt_shmem,address=,server=y,suspend=n 값을 전달하여 Java 프로세스가 JDB 디버그 세션을 시작할 수 있도록 하고 address=*:5005 값을 전달하여 5005를 지정합니다. 원격 디버깅 포트가 됩니다.

따라서 위의 명령은 Docker 컨테이너를 시작하고 이제 연결하도록 원격 디버깅 구성을 구성할 수 있습니다.

원격 jvm 디버그를 사용하여 구성

구성에서 5005 포트를 사용하여 원격 JVM에 연결하도록 지정했음을 알 수 있습니다.

이제 디버그 옵션에서 이 구성을 선택하고 디버그를 클릭하면 이미 실행 중인 Docker 컨테이너에 연결하여 디버그 세션을 시작합니다.

5. 결론

이 기사에서는 IntelliJ에서 도커화된 애플리케이션을 디버깅하는 데 사용할 수 있는 다양한 구성 옵션을 배웠습니다.

res – REST with Spring (eBook) (everywhere)