docker로 spring 앱 만들기

초보개발·2022년 6월 13일
0

docker를 이용해 간단한 spring 애플리케이션을 만드는 방법에 대해 메모해 놓는다.

1. 새로운 디렉토리를 생성한다.

나는 docker-spring 이름을 가진 디렉토리를 만들었다. 이제 이 곳에서 스프링 프로젝트를 작성할 것이다.

2. 스프링 애플리케이션

spring-boot-starter-web 종속성을 추가해준 아주 간단한 프로젝트를 생성했다. 메인 페이지에서 데이터가 보여지도록 테스트할 예정이므로 아래와 같은 코드를 추가해 주었다.

package com.example.demo;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/")
    public ResponseEntity mainPage() {
        return new ResponseEntity("Hello Spring!", HttpStatus.OK);
    }
}

3. Dockerfile 작성하기

  • /Users/mardi/Desktop/docker-spring/demo
    spring 프로젝트 내 최상단에 Dockefile을 추가해 준다.
  • Dockerfile 작성
    gradle을 사용중이라면 JAR_FILE=build/libs/..에 jar파일이 있다.
FROM openjdk:11

ARG JAR_FILE=build/libs/demo-0.0.1-SNAPSHOT.jar

COPY ${JAR_FILE} app.jar

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]

maven을 사용중이라면 JAR_FILE=target/..에 있다.

FROM openjdk:11

ARG JAR_FILE=target/demo-0.0.1-SNAPSHOT.jar

COPY ${JAR_FILE} app.jar

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]
  • FROM: 도커 이미지 생성시 기반이되는 이미지 레이어 지정
  • ARG: 변수 지정
  • COPY: 호스트의 파일과 디렉토리를 컨테이너로 복사
    - ADD: 파일과 디렉토리를 컨테이너에 추가, COPY는 단순 복사, ADD는 압축 파일의 경우 압축 해제 기능까지 포함됨
  • EXPOSE: 외부 노출 포트 설정
  • ENTRYPOINT: 도커 컨테이너에서 실행할 프로세스 지정

4. 이미지 빌드

docker build -t example/spring-app ./

성공적으로 마무리되면 아래와 같이 출력될 것이다.

5. 도커 컨테이너 실행

docker run -p 12345:8080 example/spring-app

로컬의 네트워크와 컨테이너 내부의 네트워크를 연결해줘야 접속이 가능해지기 때문에 -p <로컬 호스트 포트>:<컨테이너 속 포트> 추가해주면 된다.

프로젝트가 복잡해지면 이 방법은 힘들것이다. 최상위 디렉터리에 모든 파일들이 뒤섞여 있기 때문이다. 따라서 WORKDIR로 작업 디렉터리를 설정해줄 수 있다고 한다.
대부분 WORKDIR /usr/src/app 을 기본 경로로 두는 것 같다.

끝!

0개의 댓글