본문 바로가기
한화시스템 Beyond SW Camp/데브옵스

[Docker] Dockerfile로 자동 빌드&디버깅 (Edit Configuration)

by taeh00n 2025. 3. 13.

https://taeh00n.tistory.com/entry/Docker-Dockerfile-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A1%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EB%B0%B0%ED%8F%AC

 

[Docker] Dockerfile 스크립트로 이미지 만들기 & 배포

Dockerfile 스크립트로 이미지 만들기Dockerfile 스크립트를 작성하고 이 스크립트를 빌드해 이미지를 만드는 방법이다. 주요 Dockerfile 인스트럭션인스트럭션내용FROM토대가 되는 이미지를 지정ADD이

taeh00n.tistory.com

위의 작업을 하다보면 docker build, docker tag, docker push등으로 이미지를 빌드하고 푸시하는 과정이 귀찮게 느껴질 것이다. 이것을 자동화하기 위해 Edit Configuration 기능을 활용해보겠다.

Edit Configuration -> Dockerfile 

Dockerfile 

FROM    openjdk:17-ea-slim-buster
COPY     ./build/libs/day3back-0.0.1-SNAPSHOT.jar   /app.jar
EXPOSE  8080
ENTRYPOINT  ["java", "-jar", "/app.jar"]

Dockerfile이 위의 상태일 경우이다.

 

openjdk:17-ea-slim-buster 이미지를 기반으로 컨테이너를 생성

./build/libs/day3back-0.0.1-SNAPSHOT.jar 파일을 컨테이너 내부 /app.jar 경로로 복사

8080번 포트를 개방하고 해당 포트에서 애플리케이션 실행

컨테이너가 실행될 때 java -jar /app.jar 명령

이렇게 실행하면 이미지가 생성될 것이고 컨테이너가 실행될 것이다. 하지만 코드를 수정하고 다시 run을 하면은 jar 파일이 최신화되지 않았으므로 변경사항이 적용되지 않을 것이다.

Before launch 에서 bootJar를 설정해주면 애플리케이션 실행 전에 자동으로 bootJarTask가 실행돼서 변경사항을 적용할 수 있을 것이다.


5005 포트를 사용한 Remote JVM Debug 설정

하지만 이렇게 실행을 하면 디버그를 할 수가 없다. 왜냐하면 개발도구로 실행되는 것이 아니라 로컬에서 컨테이너로 실행되고 있기 때문이다.

Dockerfile 변경

FROM    openjdk:17-ea-slim-buster
COPY     ./build/libs/day3back-0.0.1-SNAPSHOT.jar   /app.jar
EXPOSE  8080
ENTRYPOINT  ["java", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005", "-jar", "/app.jar"]

기존의 Dockerfile과 다른 점은 "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005" 라는 디버깅 옵션이 추가되었다.

  • agentlib:jdwp : Java 디버거(JDWP) 활성화 옵션
  • transport=dt_socket : socket 기반 디버거 연결
  • server=y : 컨테이너가 디버그 서버 역할 설정. IDE에서 원격으로 컨테이너에 붙을 수 있음
  • suspend=n : 디버깅 세션이 준비되지 않아도 애플리케이션을 즉시 실행 
  • address=*:5005 : 디버깅 포트 5005로 설정 

 

 

애플리케이션과 IDE가 디버깅을 위한 5005.포트가 개방되어있는 것을 볼 수 있다.

 

 

=> 하지만 이러헥 하면 5005번 디버깅 포트가 열려있어 보안에 좋지 않을 수 있다. 그렇기에 외부에 노출되지 않도록 조심해야하며 디버그 포트 사용 후 즉시 비활성화를 하는 등의 보안을 강화하는 작업을 해야한다.