Docker는 사용하면 할수록 편리함을 더해주는 도구인 것 같습니다.
스프링 부트도 도커를 이용하여 한번에 환경을 구성하면 얼마나 편할까요?
스프링 부트 가이드를 참고해서 스프링 부트를 도커로 구성해 보겠습니다. 이 링크에는 Spring Boot를 애플리케이션을 실행하기 위한 docker 이미지를 작성하는 내용을 안내하고 있으니 참고해 보세요.
준비 사항
먼저 준비 사항을 살펴보겠습니다.
- 즐겨 사용하는 IDE 아무것이나. (저는 IntelliJ를 사용했습니다.)
- JDK 1.8 이상
- Gradle 4, Maven 3.2 이상
- 64비트 환경에서 실행되는 Docker
이렇게 준비를 마치면 몇 분 만에 spring boot 애플리케이션을 개발할 수 있는 환경을 구성할 수 있습니다.
먼저 스프링 부트 가이드에서 제공해주는 git repository를 클론 해 보겠습니다.
git clone https://github.com/spring-guides/gs-spring-boot-docker.git
git clone을 했으면 gs-spring-boot-docker/initial 경로로 이동하여 gradle을 빌드하고 애플리케이션을 실행해 보세요.
컨트롤러가 없어 localhost:8080으로 접근해도 error페이지만 나올 거예요.
저는 gradle로 빌드해 보았습니다. Maven관련 파일도 프로젝트 내에 있으니 maven을 사용하시는 분은 pom.xml을 이용하시면 됩니다.
/src/main/java/hello/Application.java 파일에 controller를 추가해 보겠습니다.
@SpringBootApplication
@RestController
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@RequestMapping("/")
public String home() {
return "Hello Docker World";
}
}
이제 localhost:8080로 요청 하명 Hello Docker World라고 응답이 나오는 모습을 볼 수 있습니다.
아래 명령어로 애플리케이션을 빌드하고 실행해 보세요.
만약 명령어에 error가 나오면 &&을 기준으로 나누어 명령어를 입력하면 정상 적으로 빌드할 수 있습니다.
Gradle
./gradlew build && java -jar build/libs/gs-spring-boot-docker-0.1.0.jar
Maven
./mvnw package && java -jar target/gs-spring-boot-docker-0.1.0.jar
Dockerfile 만들기
이번엔 스프링 부트 프로젝트에서 Dockerfile을 만들어 보겠습니다.
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Docker build
아래의 명령어를 입력하여 빌드를 실행할 수 있습니다.
참고로 아래 명령어를 위도우에서 시행할 경우에 파일에 '실행 가능'으로 표시하는 옵션이 없기 때문에 경고 문구가 나타납니다.
Gradle
$ docker build --build-arg JAR_FILE=build/libs/*.jar -t springio/gs-spring-boot-docker .
Maven
$ docker build -t springio/gs-spring-boot-docker .
run
docker run -p 8080:8080 -t springio/gs-spring-boot-docker
Dockerfile 분석해 보기
자 이제 스프링 부트 애플리케이션을 docker를 이용하여 빌드해 보았습니다.
빌드 과정을 기술한 Dockerfile의 내용을 살펴보겠습니다.
FROM
FROM openjdk:8-jdk-alpine
빌드 과정에서 사용할 이미지 파일을 정의합니다.
alpine 리눅스에서 사용하는 openjdk 8을 이용하였습니다.
ARG
ARG JAR_FILE=target/*.jar
build 과정에서 사용하는 변수를 정의합니다.
JAR_FILE라는 변수에 target/*.jar 값을 지정하였습니다.
COPY
COPY ${JAR_FILE} app.jar
COPY를 이용하여 파일이나 디렉토리를 복사하고 컨테이너에 추가할 수 있습니다.
JAR_FILE의 변수에 저장한 파일을 컨테이너의 app.jar 경로에 추가하고 있습니다.
ENTRYPOINT
ENTRYPOINT ["java","-jar","/app.jar"]
컨테이너가 시작되었을 때 실행할 명령어를 정의 합니다.
Dockerfile 내에 1번만 정의가 가능 합니다.
java -jar /app.jar 명령어를 실행하도록 설정하였습니다.
참고
'infra > Docker' 카테고리의 다른 글
ec2 인스턴스에 빠르게 Docker 환경 세팅하기 (0) | 2023.04.03 |
---|---|
[Docker] 리눅스에서 docker를 설치하고 non-root 권한 지정하기 (0) | 2021.01.09 |
[Docker] centos8 환경에서 docker 구성하기 (0) | 2020.05.09 |
[Docker] docker를 이용하여 centOS 환경을 만들어 보자 (2) | 2020.02.07 |
댓글