docker를 이용해 간단한 spring 애플리케이션을 만드는 방법에 대해 메모해 놓는다.
나는 docker-spring 이름을 가진 디렉토리를 만들었다. 이제 이 곳에서 스프링 프로젝트를 작성할 것이다.
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);
}
}
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"]
docker build -t example/spring-app ./
성공적으로 마무리되면 아래와 같이 출력될 것이다.
docker run -p 12345:8080 example/spring-app
로컬의 네트워크와 컨테이너 내부의 네트워크를 연결해줘야 접속이 가능해지기 때문에 -p <로컬 호스트 포트>:<컨테이너 속 포트>
추가해주면 된다.
프로젝트가 복잡해지면 이 방법은 힘들것이다. 최상위 디렉터리에 모든 파일들이 뒤섞여 있기 때문이다. 따라서 WORKDIR로 작업 디렉터리를 설정해줄 수 있다고 한다.
대부분 WORKDIR /usr/src/app 을 기본 경로로 두는 것 같다.
끝!