반응형
Spring boot 프로젝트를 docker image
로 만들어 보겠습니다.
간단한 spring boot 프로젝트 생성
HomeController
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/hello")
public String hello(@Value("${test.customName}") String name) {
return "hello, " + name + "!";
}
}
application.yml
test:
customName: ${CUSTOM_NAME}
"/hello"
로 요청이 들어오면application.yml
에 미리 정의한test.customName
을 함께 출력하는 메소드입니다.
jar 파일 생성하기
Gradle -> build -> bootJar를 실행하면 build/libs/**.jar 가 생성됩니다.
Dockerfile 생성
docker image
를 만들기 위해서는 Dockerfile
이라는 파일에 어떤 base 이미지를 사용해서 만들지.. 등등을 명시 해줘야합니다.
- 프로젝트 최 상단 디렉토리에
Dockerfile
생성
#!/bin/bash
# base 이미지 설정
FROM openjdk:8-jre-alpine
# jar 파일 위치를 변수로 설정
ARG JAR_FILE=build/*.jar
# 환경변수 설정
ENV CUSTOM_NAME default
# jar 파일을 컨테이너 내부에 복사
COPY ${JAR_FILE} test-app.jar
# 외부 호스트 8080 포트로 노출
EXPOSE 8080
# 실행 명령어
CMD ["java", "-Dtest.customName=${CUSTOM_NAME}", "-jar", "test-app.jar"]
docker image 생성
위에서 만든 Dockerfile
을 기반으로 docker image
를 생성해보도록 하겠습니다.
docker build
$ docker build -t {name}/{image} .
만약 Docker hub
에 이미지를 업로드 하고 싶다면 name을 docker id와 동일하게 설정해야 합니다.
docker scan 에러
도커 이미지를 생성하는 도중 docker scan
을 실행하라는 메세지가 떴습니다.
해결 방법을 찾아보니 alpine 이미지를 scan해주면 해결된다고 합니다.
docker scan
$ docker scan alpine
- 다시
docker build
$ docker build -t {name}/{image} .
- 이미지 조회
$ docker images
정상적으로 잘 생성된 것을 확인할 수 있습니다!
실행해보기
$ docker run --it -e CUSTOM_NAME=iseunghan --name test-docker -p 8080:8080 {name}/{image}
- Docker 실행 시 넘겨줬던 환경변수가 잘 전달되어 출력된 것을 확인할 수 있습니다.
반응형