프로그래밍/Spring
[Spring] Java Application 구성 With Docker
나무늘보Programmer
2024. 4. 24. 21:21
본 게시글은 OzCoding Shool에서 진행된 멘토링 프로그램을 통해 배우고 학습한 내용입니다.
Docker Deskop 설치
1. Docker Desktop 페이지 방문 및 다운로드 한다.
Docker Desktop: The #1 Containerization Tool for Developers | Docker
Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.
www.docker.com
2. 설치 후 구동 및 로그인을 하면 아래 화면 처럼 나오게 된다.
Hello World! 애플리케이션 작성하기
Spring Initializr 접속(https://start.spring.io/)
Project 설정 구성하기
- Java 21 버전, Spring Boot 3.2.5 버전으로 구성했다.
- 다른 구성은 아래 사진과 같다.
프로젝트 생성하기
- 아래 Generate버튼을 클릭하여 프로젝트 아카이브(zip 파일)이 생성 및 다운 받는다.
컨트롤러 생성
- deploy-sample/src/main/java/com/example/deploysample 경로에 새로운 Java 클래스를 생성한다.
package com.example.deploysample;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello World!";
}
}
어플리케이션 빌드 및 실행
- Gradle을 사용하여 프로젝트를 빌드한다.
. /gradle build: 👉 프로젝트를 빌드해라, jar 파일 생성
java -jar build/libs/deploy-sample-0.0.1-SNAPSHOT.jar 👉 deploy-sample-0.0.1-SNAPSHOT.jar 실행
Docker 이미지 생성
Dockerfile 작성
#Dockerfile
FROM openjdk:21-jdk
CMD ["gradle", "clean", "build"]
VOLUME /tmp
ARG JAR_FILE=build/libs/deploy-sample-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} deploy-sample-0.0.1-SNAPSHOT.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","deploy-sample-0.0.1-SNAPSHOT.jar"]
Docker 이미지 빌드
docker build . -t joonhoseong/spring_hello:test
Docker 이미지 Docker Hub에 Push
Docker Hub에 로그인
docker login
Docker 이미지를 Docker Hub에 푸시
docker joonhoseong/spring_hello:test
작동 확인하기!
Trouble Shooting
source: no such file or directory: gradelw
gradle build 로 빌드!
Import Error
> Task :compileJava FAILED
/Users/mac/Desktop/JoonHo/Spring_Study/deploy-sample/src/main/java/com/example/deploysample/HelloController.java:3: error: package org.springframework.web.bind.annotation does not exist
import org.springframework.web.bind.annotation.GetMapping;
^
/Users/mac/Desktop/JoonHo/Spring_Study/deploy-sample/src/main/java/com/example/deploysample/HelloController.java:4: error: package org.springframework.web.bind.annotation does not exist
import org.springframework.web.bind.annotation.RestController;
^
/Users/mac/Desktop/JoonHo/Spring_Study/deploy-sample/src/main/java/com/example/deploysample/HelloController.java:6: error: cannot find symbol
@RestController
^
symbol: class RestController
/Users/mac/Desktop/JoonHo/Spring_Study/deploy-sample/src/main/java/com/example/deploysample/HelloController.java:8: error: cannot find symbol
@GetMapping("/hello")
^
symbol: class GetMapping
location: class HelloController
4 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
> Run with --info option to get more log output.
> Run with --scan to get full insights.
BUILD FAILED in 1s
1 actionable task: 1 executed
- build.gradle을 연 후 dependencies부분을 수정
- 변경전
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.5'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '21'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
- 변경 후
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.5'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '21'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
error: package org.springframework.web.bind.annotation does not exist
스프링프로젝트를 만들던중 라우팅을 하는 부분에서 이런 에러가 발생했다. Gradle을 사용하는 경우 build.gradle을 연 후 dependencies부분을 수정해주면 된다.
velog.io