본문 바로가기
Docker

[Docker] Jar 파일 컨테이너 실행

by 정권이 내 2024. 1. 30.

[Docker] Jar 파일 컨테이너로 실행하기

 

Jar 파일 생성

도커 컨테이너를 만들기 전에 spring boot 로 만든 웹 애플리케이션의 jar 파일을 생성해야 합니다.

 

gradle build

먼저 프로젝트 build를 실행합니다.

img

 

Gradle Tasks 탭 - boot Jar

build가 끝나면 bootJar를 실행하여 jar 파일을 생성합니다.

img

 

실행이 끝나면 프로젝트 /build/libs 경로에 [프로젝트명]-[버전]-SNAPSHOT.jar 형식으로 jar 파일이 생성됩니다.

 

Dockerfile 작성및 빌드

이제 jar 파일을 가지고 docker build 를 해보겠습니다. jar 파일과 Dockerfile 둘다 동일한 경로에 위치해있습니다.

 

Dockerfile 작성

vi Dockerfile
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=api_A_gradle-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} myboot.jar
ENTRYPOINT ["java","-jar","/myboot.jar"]
  • FROM: Docker Base Image, 도커 생성시 기반 이미지
  • ARG: Dockerfile 내부 변수
  • COPY: 파일 복사
  • ENTRYPOINT: 컨테이너 시작시 실행할 스크립트

 

작성한 Dockerfile 을 해석해보면 openjdk 8 기반의 환경을 만들고 JAR_FILE 이라는 변수에 만들어놨던 jar 파일을 등록합니다.

해당 jar 파일의 이름을 myboot 이름의 jar 파일로 컨테이너 내부에 복사를하고 "java -jar /myboot.jar" 라는 스크립트를 컨테이너 시작시 실행하도록 지정한것입니다.

 

docker 빌드

docker build -t ksl930/spring-boot-app .

-t 옵션은 도커 이미지의 이름을 지정하는 옵션입니다. 저는 ksl930/spring-boot-app 라는 이름으로 지정했습니다.

맨 뒤에 점 표시는 작성한 Dockerfile 의 경로를 나타내는것입니다. 명령을 실행하는 위치가 Dockerfile과 같은 경로에 있기 때문에 점으로 표시했습니다.

Sending build context to Docker daemon 24.14 MB
Step 1/4 : FROM openjdk:8-jdk-alpine
 ---> a3562aa0b991
Step 2/4 : ARG JAR_FILE=api_A_gradle-0.0.1-SNAPSHOT.jar
 ---> Running in 4281878aaacb
 ---> d66d05986a17
Removing intermediate container 4281878aaacb
Step 3/4 : COPY ${JAR_FILE} myboot.jar
 ---> 8018dc276c90
Removing intermediate container c68bb6e9ed89
Step 4/4 : ENTRYPOINT java -jar /myboot.jar
 ---> Running in dc548aea84d5
 ---> 52c5557ab8d6
Removing intermediate container dc548aea84d5
Successfully built 52c5557ab8d6

빌드가 정상적으로 되었다면 마지막라인에 Successfully built 문구와 함께 도커 이미지 id가 생성됩니다.

 

이미지가 등록이 잘되었는지 확인해보겠습니다.

docker images | grep 52c5557ab8d6
ksl930/spring-boot-app	latest	52c5557ab8d6	2 minutes ago	129 MB

 

Docker image push

빌드가 완료되면 이미지가 생기게 됩니다. 로컬에서 그대로 사용해도 되지만 Docker는 인터넷만 연결 되있다면 어느 장비에서 실행을 하던 저장소의 이미지를 가져와서 동일한 환경으로 실행할수 있다는 점입니다.

가장 많이 사용하는 이미지 저장소인 DockerHub 사이트에서 계정을 생성하여 본인만의 저장소를 만들어야 합니다.

 

docker login

docker login 명령으로 DockerHub 사이트의 계정과 비밀번호를 입력하면 됩니다.

docker login
...
...
Login Succeeded

 

docker push

본인의 DockerHub 저장소에 이미지를 push 해야 하는데 명령어 형식은 아래와 같습니다.

docker push [docker 계정]/[docker image 이름]
docker push dockerID/dockerImage

 

docker run

docker run 명령으로 컨테이너를 실행할수 있는데 -p 옵션은 포트포워딩으로 컨테이너 외부와 내부를 연결해주는 포트입니다. 제가 실행한 웹애플리케이션이 8085 포트를 사용하므로 컨테이너 외부에서 8085 포트로 접속시 포트포워딩으로 연결했습니다.

docker run -d -p 8085:8085 --name myboot ksl930/spring-boot-app
curl -XGET localhost:8085/user/info
Hello User MicroService!

 

반응형

댓글